RBAC и описание ролей в файле

Обсуждение документации. Переводы Cookbook и авторские рецепты.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

RBAC и описание ролей в файле

Сообщение samdark »

Обновил рецепт «RBAC и описание ролей в файле». Отказался от использования состояний для хранения роли т.к. при использовании allowAutoLogin пользователь останется с прежней ролью до момента повторного логина, что может случиться очень нескоро. Вместо этого роль выбирается из базы каждый раз.

http://yiiframework.ru/doc/cookbook/ru/access.rbac.file
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение Ekstazi »

По-моему идеалогически правильней логику BaseCpntroller перенести в authManager. Однако я не уверен по поводу порядка инициализации компонентов, так что такой вариант отпадает.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение samdark »

т.е. отнаследоваться от CPhpAuthManager и перекрыть, например, load(), заменив там назначение _assignments?

Вариант. Надо проверить только, будет ли проинициализирован к этому моменту WebUser.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение samdark »

Даже не load и не перекрыть… просто перетащить код из базового контроллера в init() нашего нового менеджера авторизации:

Код: Выделить всё

function init(){
        parent::init();
        // Для гостей у нас и так роль по умолчанию guest.
        if(!Yii::app()->user->isGuest){
            // Связываем роль, заданную в БД с идентификатором пользователя,
            // возвращаемым UserIdentity.getId().
            $this->assign(Yii::app()->user->role, Yii::app()->user->id);
        }
    }
 
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение Ekstazi »

Я думаю лучше так

Код: Выделить всё

private $wasAssigned=false;
...
public function checkAccess($itemName, $userId, $params=array ( )){
  if(!$this->wasAssigned){
     $this->wasAssigned=true;
      if(!Yii::app()->user->isGuest){
            // Связываем роль, заданную в БД с идентификатором пользователя,
            // возвращаемым UserIdentity.getId().
            $this->assign(Yii::app()->user->role, Yii::app()->user->id);
      }   
  }
  return parent::checkAccess($itemName,$userId,$params);
} 
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение samdark »

По-моему в init() логичнее. У нас инициализация пройдёт один раз. Далее объект будет лежать в реестре Yii::app().
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение Ekstazi »

Я с вами согласен, однако мой вариант не зависит от порядка инциализации компонентов.
Tim
Сообщения: 6
Зарегистрирован: 2009.10.09, 13:05

Re: RBAC и описание ролей в файле

Сообщение Tim »

Доброго времени суток.

Программирую с Yii не давно - Newbee.

Вопрос о RBAC. Что и куда сохранять:

Куда сохранить BaseController, WebUser. При сохранении в '/framework/web/' получаю ошибку что требуемый фал не найден.
аналогичную ошибку получаю при попытке сохранить:

WebUser, BaseController в папку protected/components

Буду признателен за Ваш ответ.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение samdark »

В protected/components. Убедитесь, что в конфиге есть:

Код: Выделить всё

'import'=>array(
        'application.components.*',
 
Tim
Сообщения: 6
Зарегистрирован: 2009.10.09, 13:05

Re: RBAC и описание ролей в файле

Сообщение Tim »

Да прописано.

main.php

Код: Выделить всё

'import'=>array(
                     'application.models.*',
                     'application.components.*'
)
 
Я сейчас прописал BaseController в autoload в YiiBase - вроде больше не ругается на него, хотя пока точно сказать не могу.

А вот WebUser все еще найти не может :(
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение samdark »

Правило №1 — не лезть в framework.

Чтобы увидился WebUser, надо, как и написано в рецепте:

Код: Выделить всё

'user'=>array(
    'class' => 'WebUser',
    // …
),
 
ну и положить его в любое место, прописанное в import. У меня это обычно components.
Tim
Сообщения: 6
Зарегистрирован: 2009.10.09, 13:05

Re: RBAC и описание ролей в файле

Сообщение Tim »

Спасибо большое!!! Вроде больше не ругается!! :)

Но сейчас столкнулся с тем что Yii::app()->user->isGuest все время выдаем не что я Guest, когда я уже авторизован в том числе. Назначение ролей тоже не происходит (((
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение samdark »

Тут только отлаживать код.

Можете создать тему вроде этой: viewtopic.php?f=3&t=224

А можете и самостоятельно.
Tim
Сообщения: 6
Зарегистрирован: 2009.10.09, 13:05

Re: RBAC и описание ролей в файле

Сообщение Tim »

Хахаха!!! ))) У меня получилось все как описал Sam!!! Спасибо большое!!!!!

Если комуто будет интересно, баг был не в коде, а в среде. Дело в том что, в какой-то момент Denwer стал выдавать мне старые сессии. Вопос был решен рестартом Httpd. Я до сих пор не понял как так это все произошло, но все равно сейчас все работает норм!!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение samdark »

Рецепт обновлён. Указал местонахождение файлов, добавил несколько подсказок и избавился от использования базового контроллера.

http://yiiframework.ru/doc/cookbook/ru/access.rbac.file
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение Ekstazi »

Рад, что мои идеи тоже вошли в рецепт, я кстати нашел интересную особеность checkAccess:
1)в bizRule нельзя его повторно вызвать.
2)Он не возвращает результат выполнения bizRule.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение samdark »

А зачем его повторно вызывать в bizRule?
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение Ekstazi »

Ну у меня очень сложная система ролей, чтоб не создавать кучу операций(вложеных друг в друга), решил сделать проще - операции сами проверяют в bizRule для какой роли пользователя и как они работают.
SpiLLeR
Сообщения: 350
Зарегистрирован: 2009.09.17, 16:47
Откуда: Санкт-Петербург
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение SpiLLeR »

Надо еще добавить дамп таблицы user. Так же указать где должен находится файл WebUser.php.
Предупрежден - значит вооружен.
devKP.ru
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: RBAC и описание ролей в файле

Сообщение samdark »

Путь к файлу указал. Также добавил модель User.
Ответить