Страница 1 из 1
CWebUser проблема с раширением
Добавлено: 2011.04.14, 11:20
ikarushka
Расширил CWebUser по рецепту
http://yiiframework.ru/doc/cookbook/ru/access.rbac.file
Код: Выделить всё
class WebUser extends CWebUser {
private $_model = null;
function getRole() {
if($user = $this->getModel()){
// в таблице User есть поле role
return $user->role;
}
}
function getUsername() {
if($user = $this->getModel()){
return $user->username;
}
}
private function getModel(){
if (!$this->isGuest && $this->_model === null){
$criteria = new CDbCriteria;
$criteria->with=array('sellerShopSettingGenerals');
$criteria->select='`t`.id, `t`.role,`t`.username';
$criteria->condition='`t`.id=:id AND `t`.status=:status AND `sellerShopSettingGenerals`.subdomain=:subdomain';
$criteria->params=array(':id'=>$this->id,'status'=>'confirm', 'subdomain'=>$_GET['domain']);
$this->_model = User::model()->find($criteria);
}
return $this->_model;
}
}
В пердставлении
Код: Выделить всё
echo Yii::app()->user->role;
echo Yii::app()->user->username;
работают.
А в экшене контроллера
Код: Выделить всё
echo Yii::app()->user->role;
echo Yii::app()->user->username;
тишина!!
Сломал всю голову уже. Так и должно быть?
Re: CWebUser проблема с раширением
Добавлено: 2011.04.14, 11:31
ikarushka
Вот похоже таже проблема
viewtopic.php?f=3&t=1007&hilit=CWebUser&start=30
Так она и осталась не решенной?
Re: CWebUser проблема с раширением
Добавлено: 2011.04.14, 11:33
mrix
Должно работать также. Попробуй в лог записать. Может, там стоит ob_start
Код: Выделить всё
Yii::log(Yii::app()->user->username, CLogger::LEVEL_ERROR);
Re: CWebUser проблема с раширением
Добавлено: 2011.04.14, 12:24
Johnatan
Код: Выделить всё
$criteria->params=array(':id'=>$this->id,'status'=>'confirm', 'subdomain'=>$_GET['domain']);
Двоеточия нигде не потеряли?
Re: CWebUser проблема с раширением
Добавлено: 2011.04.14, 12:38
ikarushka
Ребята, спасибо за помощь
mrix
В лог пишет:
2011/04/14 14:45:55 [error] [application]
in /home/artem/webwork/shopband/protected/modules/admin/controllers/CatalogController.php (174)
174 строка это : Yii::log(Yii::app()->user->username, CLogger::LEVEL_ERROR);
johnatanb
двоеточия действительно потерял. Но видимо когда сто раз переписыва и пробывал всякие способы. Сейчас исправил - ситуация прежняя. Копаю
Re: CWebUser проблема с раширением
Добавлено: 2011.04.14, 13:41
ikarushka
Вызов в коетроллере:
CVarDumper::dump(Yii::app()->user->role, 10, true);
возвращает null
А в представлении тотже вызов дает верное значение
Re: CWebUser проблема с раширением
Добавлено: 2011.04.14, 13:53
rak
ну тут нужно дебажить.
И желательно не вар дампом
Re: CWebUser проблема с раширением
Добавлено: 2011.04.14, 14:05
ikarushka
Стыдно, но спрошу. А чем? ))
Re: CWebUser проблема с раширением
Добавлено: 2011.04.14, 14:09
rak
ну лично я пользуюсь netbeans + xdebug, облегчает жизнь на 1000%
Re: CWebUser проблема с раширением
Добавлено: 2011.04.14, 14:13
ikarushka
Спасибо пошел втыкать ))
Re: CWebUser проблема с раширением
Добавлено: 2011.04.15, 10:09
ikarushka
Фуффф. Ну вроде начало проясняться на горизонте. Чего я только не делал, чтобы понять в чем дело, как только я не переписывал WebUser ничего не помогало.
В акшене: echo Yii::app()->user->role - пусто
В представлении: echo Yii::app()->user->role - верное значение.
Битва была жаркая )) В какой-то момент я решил проверить, а в других экшенах этого контроллера такая же проблема? И о ужос - в них echo Yii::app()->user->role отрабытывало верно.
Оказалась следующая история. Тот экшен, который проблемный дергался с сайта через CHtml::ajaxLink и ответ сервера я смотрел через FireBug (страница не перезагружалась), и в FireBug в POST на CVarDumper::dump(Yii::app()->user->role, 10, true); всегда приходило null. Но если к экшену обратится через адресную строку браузера, то все все ok - CVarDumper::dump(Yii::app()->user->role, 10, true); возвращает то что надо! При этом в проблемном экшене у меня ни какого кода кроме CVarDumper::dump(Yii::app()->user->role, 10, true); нет.
То есть сейчас вопрос можно переформулировать. Почему при расширении СWebUser вызов в экшене Yii::app()->user->role не работает, если обращаться к экшену асинхронно? Кто-то сталкивался с подобной проблемой?
Re: CWebUser проблема с раширением
Добавлено: 2011.04.15, 11:11
ikarushka
Ага! Все дело в GET параметрах которые присутсвуют в ajaxLink.
Короче, код проблемной ссылки у меня следующий:
Код: Выделить всё
echo CHtml::ajaxLink('X',
Yii::app()->controller->createUrl('catalog/delete', array('id'=>$oneCat->id, 'ajax'=>'yes')),
array(type=>'POST', 'success'=>'js:function(a) {$("#'.$oneCat->id.'").hide("slow").remove(); }',),
array('confirm'=>Yii::t("AdminModule.msCatalogAndGoods","catalog_deleteAtantion"), 'id'=>'gb-message-delete-'.$oneCategory->id)
);
в этом случае actionDelete c
CVarDumper::dump(Yii::app()->user->role, 10, true); возвращаеь null.
Если GET параметры убрать
Код: Выделить всё
echo CHtml::ajaxLink('X',
Yii::app()->controller->createUrl('catalog/delete'),
array(type=>'POST', 'success'=>'js:function(a) {$("#'.$oneCat->id.'").hide("slow").remove(); }',),
array('confirm'=>Yii::t("AdminModule.msCatalogAndGoods","catalog_deleteAtantion"), 'id'=>'gb-message-delete-'.$oneCategory->id)
);
то все работает корректно. С чем может быть связано такое поведение???
Re: CWebUser проблема с раширением
Добавлено: 2011.04.15, 12:17
ikarushka
Не ну мистика же!?
Или запрос такой: catalog/delete/id/32/ajax/yes.html и тогда Yii::app()->user->role null
Или такой catalog/delete.html и тогда Yii::app()->user->role нужное значение.
А передавать параметры в экшен, не смотря на это, как-то надо
Re: CWebUser проблема с раширением
Добавлено: 2011.04.15, 13:31
ikarushka
Все ребята, разобрался!!!
Это была только моя заруба. Постараюсь объяснить. (Не уверен, что это кому-то нужно, но вдруг кому-нибудь пригодится).
Делаю модулем админку с доступом к ней многих пользователей. Но каждый пользователь у меня имеет свой субдомен. Какому пользователю, какой субдомен принадлежит - это соответствие хранится в бд в настройках аккаунта пользователя. Логинеться и работать в админке пользователь должен через свой субдомен:
http://subdomain.site.ru/admin/controller/action.html
В WebUser в
getModel у меня идет проверка на субдомен (на самом деле она и не нужна там совсем - но это я только сейчас понял):
Код: Выделить всё
$criteria->condition='`t`.id=:id AND `t`.status=:status AND `sellerShopSettingGenerals`.subdomain=:subdomain';
$criteria->params=array(':id'=>$this->id,':status'=>'confirm', ':subdomain'=>$_GET['subdomain']);
$_GET['subdomain'] значение попадает из адресной строки, для этого в конфигурации прописано правило:
Код: Выделить всё
'http://www.<subdomain:\w+>.shopband.ru/admin/<controller:\w+>/<action:\w+>'=>'/admin/<controller>/<action>'
Ну и дальше все просто. Кода я обращаюсь к экшену через ajaxLink c GET параметрами
Код: Выделить всё
echo CHtml::ajaxLink('X',
Yii::app()->controller->createUrl('catalog/delete', array('id'=>$oneCat->id, 'ajax'=>'yes')),
....
);
В $_GET не попадает значение subdomain из адресной строки (Почему так происходит, пока не разобрался), там есть только $_GET['id'] и $_GET['ajax'].
Cледовательно, когда я в экшене дергаю Yii->app()->user->role WebUser получает пустую модель так как $_GET['subdomain'] == null.
Когда я убираю GET параметры из ajaxLink то $_GET['subdomain'] получает значение из адресной строки и Yii->app()->user->role в экшене работает корректно.
Лечится:
1) Или убрать условие `sellerShopSettingGenerals`.subdomain=:subdomain'
2) Или передать параметры ajaxLink с помощью 'data' => array( 'id' => $oneCat->id, 'ajax'=>'yes')
Вопчем хеппи энд - прошу извинить, если кого сильно отвлек ))
Re: CWebUser проблема с раширением
Добавлено: 2011.04.15, 13:39
because
летопись событий