RBAC и описание ролей в файле
Re: RBAC и описание ролей в файле
Да, Вы правы. Это первое что я подумал, когда у меня не получилось получить описание роли находящееся в файле. Для этого придется сделать еще одну табличку в БД с ролями и описаниями к ним(для централизованного хранения и формирования списков ролей).
Получается что у нас есть описание ролей в файле и данные об этом в БД. Это дополнительные отношения в модели и дополнительные запросы к БД.
Я просто задался вопросом о целесообразности такого решения. Мне кажется поле description не зря определено при описании ролей в файле.
Может тогда проще реализовать RBAC через БД? Правда непонятно на сколько ))
Может я выбрал неверный путь решения своей задачи? Как Вы в своих проектах решаете вопрос об отображении ролей пользователей в админке и на сайте в целом? Как осуществляете создание списка ролей при описании их в файле? Используете ли Вы имена ролей или их описания?
Спасибо!
Получается что у нас есть описание ролей в файле и данные об этом в БД. Это дополнительные отношения в модели и дополнительные запросы к БД.
Я просто задался вопросом о целесообразности такого решения. Мне кажется поле description не зря определено при описании ролей в файле.
Может тогда проще реализовать RBAC через БД? Правда непонятно на сколько ))
Может я выбрал неверный путь решения своей задачи? Как Вы в своих проектах решаете вопрос об отображении ролей пользователей в админке и на сайте в целом? Как осуществляете создание списка ролей при описании их в файле? Используете ли Вы имена ролей или их описания?
Спасибо!
- timlar
- Сообщения: 1382
- Зарегистрирован: 2009.09.19, 17:49
- Откуда: Украина, Днепропетровск
- Контактная информация:
Re: RBAC и описание ролей в файле
В таком случае, лучше использовать полноценный CDbAuthManager: http://www.yiiframework.com/doc/api/CDbAuthManager
Twitter: @timlar_ua
Re: RBAC и описание ролей в файле
Возникли следующие вопросы:
Требуется сделать возможность назначать сразу несколько ролей одному пользователю. Для проверки обладания пользователем роли существует php код в каждом случае. Будет ли лучшем решением засунуть этот код в bizRule ?
В каком месте кода используется это bizRule для проверки? Его использует класс PHPAuthManager или же фильтр accessControl ?
Чем тогда отличается проверка роли таким способом от проверки в WebUser::checkAccess($operation, $params) ?
Также непонятна следующая ситуация:
в мануалах и судя по названию параметра метод checkAccess проверяет возможность пользователя совершить ту или иную операцию $operation.
Но если использовать вот такое правило:
и при этом определить следующий метод в WebUser
То при обращении к соотв. контроллеру скрипт умрет с надписью admin. Выходит, что WebUser::checkAccess проверяет не операцию, а роль?
В документации об этом написано достаточно мутно.
Также вопрос, можно ли методом CPhpAuthManager::assign() привязать более чем 1 роль к пользователю ?
P.S. Обнаружил что у класса CPhpAuthManager так же как и у CWebUser есть метод checkAccess, и окончательно запутался В каком случае что вызывается?
Требуется сделать возможность назначать сразу несколько ролей одному пользователю. Для проверки обладания пользователем роли существует php код в каждом случае. Будет ли лучшем решением засунуть этот код в bizRule ?
В каком месте кода используется это bizRule для проверки? Его использует класс PHPAuthManager или же фильтр accessControl ?
Чем тогда отличается проверка роли таким способом от проверки в WebUser::checkAccess($operation, $params) ?
Также непонятна следующая ситуация:
в мануалах и судя по названию параметра метод checkAccess проверяет возможность пользователя совершить ту или иную операцию $operation.
Но если использовать вот такое правило:
Код: Выделить всё
public function accessRules()
{
return array(
array('allow',
'roles'=>array('admin'),
)
);
}
Код: Выделить всё
function checkAccess($operation, $params=array())
{
print_r($operation);
print_r($params);
die();
}
В документации об этом написано достаточно мутно.
Также вопрос, можно ли методом CPhpAuthManager::assign() привязать более чем 1 роль к пользователю ?
P.S. Обнаружил что у класса CPhpAuthManager так же как и у CWebUser есть метод checkAccess, и окончательно запутался В каком случае что вызывается?
Yii Jabber Conference: yii@conference.jabber.ru
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: RBAC и описание ролей в файле
Зависит от ситуации.Требуется сделать возможность назначать сразу несколько ролей одному пользователю. Для проверки обладания пользователем роли существует php код в каждом случае. Будет ли лучшем решением засунуть этот код в bizRule ?
Используется так:В каком месте кода используется это bizRule для проверки? Его использует класс PHPAuthManager или же фильтр accessControl ?
Код: Выделить всё
Yii::app()->user->checkAccess('role', array('bizrule_params'));
Ничем это она и есть.Чем тогда отличается проверка роли таким способом от проверки в WebUser::checkAccess($operation, $params) ?
Все сущности в RBAC по сути равны и различаются исключительно на уровне описания и восприятия.То при обращении к соотв. контроллеру скрипт умрет с надписью admin.
Да.Также вопрос, можно ли методом CPhpAuthManager::assign() привязать более чем 1 роль к пользователю ?
Обычно используется метод CWebUser, который вроде использовал метод AuthManager.P.S. Обнаружил что у класса CPhpAuthManager так же как и у CWebUser есть метод checkAccess, и окончательно запутался В каком случае что вызывается?
Нравится Yii? Давайте сделаем его лучше!.
Re: RBAC и описание ролей в файле
Спасибо, кажется разобрался.
Удалось выяснить следующие вещи:
1. Если у WebUser есть метод checkAccess, то вызывается он. Если нету, то вызывается PhpAuthManager::checkAccess.
2. Если bizRule написать синтаксически неправильно, то вопреки ожиданиям скрипт не будет падать Такое правило просто не пройдет проверку.
Удалось выяснить следующие вещи:
1. Если у WebUser есть метод checkAccess, то вызывается он. Если нету, то вызывается PhpAuthManager::checkAccess.
2. Если bizRule написать синтаксически неправильно, то вопреки ожиданиям скрипт не будет падать Такое правило просто не пройдет проверку.
Yii Jabber Conference: yii@conference.jabber.ru
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: RBAC и описание ролей в файле
Можно, чтобы соответствовало ожиданиям: http://yiiframework.ru/doc/cookbook/ru/core.development
Нравится Yii? Давайте сделаем его лучше!.
Re: RBAC и описание ролей в файле
Скажите, пожалуйста, как происходит привязка роли к пользователю и каким образом authManager знает какая роль (или роли?) есть у пользователя?
Моё предположение:
1 - после определённого действия пользователя (регистрация, оплата за доп. сервис, присоединение в группу) в бд формируется дополнительная привязка между пользователем и соответствующей ролью/правилом
2 - при логине юзера, CWebUser (или authManager?) автоматически подтягивает роль (роли?).
Так ли это? Если да, то есть ли встроенные средства Yii для этого (динамическая привязка роли и сохранение этого в бд)?
Спасибо.
Моё предположение:
1 - после определённого действия пользователя (регистрация, оплата за доп. сервис, присоединение в группу) в бд формируется дополнительная привязка между пользователем и соответствующей ролью/правилом
2 - при логине юзера, CWebUser (или authManager?) автоматически подтягивает роль (роли?).
Так ли это? Если да, то есть ли встроенные средства Yii для этого (динамическая привязка роли и сохранение этого в бд)?
Спасибо.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: RBAC и описание ролей в файле
Да, так. Да, есть. В официальном гайде есть пример кода. Только там не делается save().
Нравится Yii? Давайте сделаем его лучше!.
Re: RBAC и описание ролей в файле
Всем привет!
Кто может подсказать, нужно ли делать отмену ролей пользователя при выходе?
А то меня вот этот пример с толку сбил http://www.yiiframework.com/wiki/65/how ... -php-file/.
Там как раз делается revoke при logout.
Кто может подсказать, нужно ли делать отмену ролей пользователя при выходе?
А то меня вот этот пример с толку сбил http://www.yiiframework.com/wiki/65/how ... -php-file/.
Там как раз делается revoke при logout.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: RBAC и описание ролей в файле
Нет, не нужно. Там довольно странный рецепт.
Нравится Yii? Давайте сделаем его лучше!.
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: RBAC и описание ролей в файле
И, кстати, накрывается когда много пользователей online.
Re: RBAC и описание ролей в файле
Спасибо за ответ.
Re: RBAC и описание ролей в файле
Сразу извиняюсь за глупые вопросы, только начал разбираться с Yii.
1) Для того чтобы роль из БД была доступна в Yii::app()->user->role. Не стал расширять CWebUser как описано в рецепте. А в UserIdentity.php сделал так:
Все работает, но правильно ли так делать?
2)Код описание ролей auth.php, не могу въехать как в нем описать содержание роли (те действия. которые возможны в рамках какой-либо роли).
Покажите, пожалуйста, кусок рабочего кода описание ролей с операциями и задачами.
1) Для того чтобы роль из БД была доступна в Yii::app()->user->role. Не стал расширять CWebUser как описано в рецепте. А в UserIdentity.php сделал так:
Код: Выделить всё
$this->setState('role', $user->role);
2)Код описание ролей auth.php, не могу въехать как в нем описать содержание роли (те действия. которые возможны в рамках какой-либо роли).
Покажите, пожалуйста, кусок рабочего кода описание ролей с операциями и задачами.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: RBAC и описание ролей в файле
1) Нормально, но роль не будет меняться пока юзер не перелогинится.
2) Посмотрите первые страницы темы.
2) Посмотрите первые страницы темы.
Нравится Yii? Давайте сделаем его лучше!.
Re: RBAC и описание ролей в файле
1) Понятно, мне как раз так и надо.
2) В этой теме примера не нашел. Но зато нашел ответ здесь: viewtopic.php?f=3&t=172&start=20#p3198
Sam Dark спасибо за толковый рецепт.
2) В этой теме примера не нашел. Но зато нашел ответ здесь: viewtopic.php?f=3&t=172&start=20#p3198
Sam Dark спасибо за толковый рецепт.
Re: RBAC и описание ролей в файле
Не могу понять почему в настройках всё прописано, с переопределением классов WebUser и PhpAuthManager
а сами классы как будто и не включаются. При попытке вызвать выход Yii::app()->end(); в любом из классов ничего не происходит ни при каких переходах.
Файлы с классами существуют и лежат в папке components.
Подскажите пожалуйста в каком направлении отлаживать код, не могу даже предположить.
Кстати при выводе в контроллере UsersController в методе
в Yii::app()->user->role находится объект модели Users, так и должно быть?
Есть ли возможность что в Yii::app()->user->role находится модель Users?
Код: Выделить всё
'components' => array(
'user' => array(
'class' => 'WebUser',
// enable cookie-based authentication
//'allowAutoLogin' => true,
),
'authManager' => array(
//'class' => 'CPhpAuthManager',
'class' => 'PhpAuthManager',
// Роль по умолчанию. Все, кто не админы, модераторы и юзеры — гости.
'defaultRoles' => array('guest'),
),
Файлы с классами существуют и лежат в папке components.
Подскажите пожалуйста в каком направлении отлаживать код, не могу даже предположить.
Кстати при выводе в контроллере UsersController в методе
Код: Выделить всё
public function accessRules()
{ var_dump(Yii::app()->user->role);Yii::app()->end();
return array(
array('allow', // allow all users to perform 'index' and 'view' actions
'actions' => array('index', 'view'),
'users' => array('*'),
Есть ли возможность что в Yii::app()->user->role находится модель Users?
...
Re: RBAC и описание ролей в файле
PhpAuthManager класс вызывается только после в случае использования
Yii::app()->user->checkAccess('administrator'))
Получается что при вызове public function accessRules() ничего не происходит?
Yii::app()->user->checkAccess('administrator'))
Получается что при вызове public function accessRules() ничего не происходит?
...
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: RBAC и описание ролей в файле
Происходит, но после вызова accessRules фильтр accessControl сам обращается по необходимости к checkAccess
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: RBAC и описание ролей в файле
Перечитывая тему, решив сделать что-то более переносимое из проекта в другой, задался вопросом.
Почему аутентификация вызывается из модели, вызывая UserIdentify::authentication(), который в свою очередь снова создает модель и сравнивает данные.
Совсем не гибко. Получается, если вдруг мы захотим поменять логику модели, нам (или тот кто будет после нас поддерживать проект) придется помнить что срочно нужно менять и компонент.
Например хочу поменять поле в таблице с login, на username, или не хочу больше по логину авторизоваться, а хочу по емайлу или еще более частый случай, захочу поменять метод шифрования пароля.
Все три случая потребуют лезть как в модель, так и в UserIdentity.
Сразу вспомнил про валидацию моделей, что ее просто так придумали.
Предлагаю обсудить следующие изменения в рецепте:
protected/components/UserIdentity.php:
модель User:
Ну вот как-то так. Теперь любое изменение в логике с пользователями не затронет другие компоненты.
Методами User::getId() и User::getName() регулируем что будем использовать за имя и ид авторизированого пользователя.
Что думаете по этому поводу?
Почему аутентификация вызывается из модели, вызывая UserIdentify::authentication(), который в свою очередь снова создает модель и сравнивает данные.
Совсем не гибко. Получается, если вдруг мы захотим поменять логику модели, нам (или тот кто будет после нас поддерживать проект) придется помнить что срочно нужно менять и компонент.
Например хочу поменять поле в таблице с login, на username, или не хочу больше по логину авторизоваться, а хочу по емайлу или еще более частый случай, захочу поменять метод шифрования пароля.
Все три случая потребуют лезть как в модель, так и в UserIdentity.
Сразу вспомнил про валидацию моделей, что ее просто так придумали.
Предлагаю обсудить следующие изменения в рецепте:
protected/components/UserIdentity.php:
Код: Выделить всё
class UserIdentity extends CBaseUserIdentity {
private $_model;
public function __construct($model) {
if(is_string($model))
$model=new $model;
$this->_model=$model;
}
public function authenticate() {
// Устанавливаем сценарий 'login' и проверяем модель
$this->_model->setScenario('login');
return $this->_model->validate();
}
public function getId() {
return $this->_model->getId();
}
public function getName() {
return $this->_model->getName();
}
}
Код: Выделить всё
class User extends CActiveRecord {
public function tableName(){
return 'User';
}
protected function beforeValidate(){
$this->password = md5($this->password);
return parent::beforeValidate();
}
public function rules()
{
return array(
// login & password обязательны
array('login, password', 'required'),
// проверим существует ли пользователь с заданным логином и паролем
// шифровать не нужно, мы его шифруем в beforeValidation()
array('login','exist','on'=>'login','criteria'=>array('condition'=>'`password`==:pass','params'=>array(':pass'=>$this->password))),
);
}
}
Методами User::getId() и User::getName() регулируем что будем использовать за имя и ид авторизированого пользователя.
Что думаете по этому поводу?
Жду Yii 3!
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: RBAC и описание ролей в файле
Думаю, что идею надо дооформить и она неплохо дополнит рецепт