RBCA: Пользователи, роли, база данных.
RBCA: Пользователи, роли, база данных.
Вопрос такой, я храню пользователей в таблице user, создаю модель users, со всеми полями, валидацией и так далее. Теперь я начинаю путаться и не знать, что мне делать.
Во первых: как привязать бд и authmanager? То есть чтобы когда было действие login -> он проверяет на наличие в базе данных соответствие по паролю.
Во вторых: в базе есть поле role, как в контроллере в AccessControl проверять пользователя по правам?
буду признателен любому ответу который хотя бы частично откроем мне глаза. На этом все. Спасибо заранее
Во первых: как привязать бд и authmanager? То есть чтобы когда было действие login -> он проверяет на наличие в базе данных соответствие по паролю.
Во вторых: в базе есть поле role, как в контроллере в AccessControl проверять пользователя по правам?
буду признателен любому ответу который хотя бы частично откроем мне глаза. На этом все. Спасибо заранее
Re: RBCA: Пользователи, роли, база данных.
Скорее всего вы это поля не добавляли, так как не знаете, что с ним делать. А в текущей версии это поле выпилили - удалите его и у себя.Во вторых: в базе есть поле role, как в контроллере в AccessControl проверять пользователя по правам?
https://github.com/yiisoft/yii2-app-adv ... d023a967db
Привязывать ничего не нужно, нужно создать место где вы будете назначать пользователям роли - через командуВо первых: как привязать бд и authmanager? То есть чтобы когда было действие login -> он проверяет на наличие в базе данных соответствие по паролю.
Код: Выделить всё
$auth->assign($admin, 1); // 1= id администратора в базе данных, $admin - роль администратора в rbac
Код: Выделить всё
public function behaviors()
{
return [
'access' => [
'class' => AccessControl::className(),
'only' => ['create', 'update'],
'rules' => [
[
'actions' => ['create', 'update'],
'allow' => true,
'roles' => ['edit'], // ТУТ, всегда проверяется не роль пользователя, а операция - разрешение на одно или несколько действий!
],
]
],
];
}
Re: RBCA: Пользователи, роли, база данных.
спасибо за ответ! Но меня не покидает ошушение, что все легче) или я просто не могу викинуть из головы авторизацию на yii1)yiijeka писал(а):Скорее всего вы это поля не добавляли, так как не знаете, что с ним делать. А в текущей версии это поле выпилили - удалите его и у себя.Во вторых: в базе есть поле role, как в контроллере в AccessControl проверять пользователя по правам?
https://github.com/yiisoft/yii2-app-adv ... d023a967db
Привязывать ничего не нужно, нужно создать место где вы будете назначать пользователям роли - через командуВо первых: как привязать бд и authmanager? То есть чтобы когда было действие login -> он проверяет на наличие в базе данных соответствие по паролю.Все проверки выполняются в AccessControlКод: Выделить всё
$auth->assign($admin, 1); // 1= id администратора в базе данных, $admin - роль администратора в rbac
Код: Выделить всё
public function behaviors() { return [ 'access' => [ 'class' => AccessControl::className(), 'only' => ['create', 'update'], 'rules' => [ [ 'actions' => ['create', 'update'], 'allow' => true, 'roles' => ['edit'], // ТУТ, всегда проверяется не роль пользователя, а операция - разрешение на одно или несколько действий! ], ] ], ]; }
Re: RBCA: Пользователи, роли, база данных.
Хм, разве на Yii1 что-то было иначе?
Re: RBCA: Пользователи, роли, база данных.
верно, было точно также)yiijeka писал(а):Хм, разве на Yii1 что-то было иначе?
Re: RBCA: Пользователи, роли, база данных.
Имею такое же не понимание как топикстартер.
В yii1 я делал так:
почему тут операция, а не роль? И что здесь означает операция?'roles' => ['edit'], // ТУТ, всегда проверяется не роль пользователя, а операция - разрешение на одно или несколько действий!
В yii1 я делал так:
Друзья, может кто-то сможет написать статью об этом? Что-то вроде этой http://www.yiiframework.ru/doc/cookbook ... .rbac.file'roles' =>array(User::ROLE_ADMIN),
2b||!2b Just read the instructions
Re: RBCA: Пользователи, роли, база данных.
в rbac есть две сущности, присваиваемые юзеру - role и permission (в yii1 первом были role, task, operation). Роль - это админ, модер, менеджер, автор итд. Разрешение - это "писать посты", "редактировать заказы" итд.zabachok писал(а): почему тут операция, а не роль? И что здесь означает операция?
в 'roles' можно прописывать любые эти сущности, но правильнее все проверки делать с помощью permission, что получается более гибко.
аналогично и тут делаете. только повторюсь, правильнее проверять не через роль, а через разрешение.zabachok писал(а): В yii1 я делал так:'roles' =>array(User::ROLE_ADMIN),
Re: RBCA: Пользователи, роли, база данных.
Личное мне очень помогла разобраться с rbac след. статья:
http://developer.uz/blog/rbac-%D1%80%D0 ... 0%B2-yii2/
http://developer.uz/blog/rbac-%D1%80%D0 ... 0%B2-yii2/
Re: RBCA: Пользователи, роли, база данных.
Все больше проясняется.
Там есть такой фрагмент:
А как на счет производительности? Если раньше у меня было одно поле в таблице с ролью и каждый пользователь опирался на него при логине, то теперь все роли в одном файле, который каждый раз грузится в память. А если там 100500 пользователей?
Или я снова не понимаю?
Там есть такой фрагмент:
Я заметил создается файл assignments.php в котором массив соответствия пользователей и их ролей. Назначить другую роль пользователю не получается.Привязка ролей к пользователю ... делается 1 раз. RBAC сохранит данные в auth_assignment и будет подхватывать роль автоматически при авторизации пользователя
А как на счет производительности? Если раньше у меня было одно поле в таблице с ролью и каждый пользователь опирался на него при логине, то теперь все роли в одном файле, который каждый раз грузится в память. А если там 100500 пользователей?
Или я снова не понимаю?
2b||!2b Just read the instructions
Re: RBCA: Пользователи, роли, база данных.
тут вы верно понимаете, поэтому я сделал такой модуль https://github.com/zelenin/yii2-rbac-modulezabachok писал(а):Все больше проясняется.
Там есть такой фрагмент:Я заметил создается файл assignments.php в котором массив соответствия пользователей и их ролей. Назначить другую роль пользователю не получается.Привязка ролей к пользователю ... делается 1 раз. RBAC сохранит данные в auth_assignment и будет подхватывать роль автоматически при авторизации пользователя
А как на счет производительности? Если раньше у меня было одно поле в таблице с ролью и каждый пользователь опирался на него при логине, то теперь все роли в одном файле, который каждый раз грузится в память. А если там 100500 пользователей?
Или я снова не понимаю?
тут assign делается не на основе данных из файла, а на лету, завися от поля в БД (колонка user.role) - так делалось обычно в yii1.
Re: RBCA: Пользователи, роли, база данных.
Спасибо большое!
Все становится яснее. Внимательно изучу Ваши примеры!
Все становится яснее. Внимательно изучу Ваши примеры!
2b||!2b Just read the instructions
Re: RBCA: Пользователи, роли, база данных.
Используйте базу данных в виде хранилища.Если раньше у меня было одно поле в таблице с ролью и каждый пользователь опирался на него при логине, то теперь все роли в одном файле, который каждый раз грузится в память. А если там 100500 пользователей?
Re: RBCA: Пользователи, роли, база данных.
И "всякие статьи" дают ошибочные сведения - Yii2 rbac следует стандарту - http://csrc.nist.gov/rbac/sandhu-ferraiolo-kuhn-00.pdf . Но вы конечно же не будете это читать, а искать модули типа yii-admin и статьи из блогов, где нарушают стандарт.
Re: RBCA: Пользователи, роли, база данных.
А перевода нет случайно?yiijeka писал(а):И "всякие статьи" дают ошибочные сведения - Yii2 rbac следует стандарту - http://csrc.nist.gov/rbac/sandhu-ferraiolo-kuhn-00.pdf . Но вы конечно же не будете это читать, а искать модули типа yii-admin и статьи из блогов, где нарушают стандарт.
2b||!2b Just read the instructions
Re: RBCA: Пользователи, роли, база данных.
не понимаю зачем делать assign через файлы? либо как в yii1 делать юзера с полем роль, или сразу хранить роли в базе данных
Re: RBCA: Пользователи, роли, база данных.
Тут кратко и суть на русском :)zabachok писал(а): А перевода нет случайно? :roll:
Re: RBCA: Пользователи, роли, база данных.
в PhpManger через файлы, в DbManager через базу.kukuruku писал(а):не понимаю зачем делать assign через файлы?
вообще так было принято при использовании PhpManager, но это не являлось именно yii-требованием, а было не совсем правильным хаком. Также можно и в yii2 сделать.kukuruku писал(а):либо как в yii1 делать юзера с полем роль
DbManagerkukuruku писал(а):сразу хранить роли в базе данных
Re: RBCA: Пользователи, роли, база данных.
я использую DbManager
есть один пользователь с ролью superadmin
при попытке проверить
получается что функция can проверяет имеет ли право пользователь на какие -либо действия, которые прописаны в behaviors()???
есть один пользователь с ролью superadmin
при попытке проверить
Код: Выделить всё
If (Yii::$app->user->can('superadmin')) { … }
Re: RBCA: Пользователи, роли, база данных.
нет, она проверяет обладает ли пользователь ролью superadminAlex@ писал(а):я использую DbManager
есть один пользователь с ролью superadmin
при попытке проверитьполучается что функция can проверяет имеет ли право пользователь на какие -либо действия, которые прописаны в behaviors()???Код: Выделить всё
If (Yii::$app->user->can('superadmin')) { … }
Re: RBCA: Пользователи, роли, база данных.
У меня в таблице БД auth_assignment пользователь привязан к роли superadmin, я не могу понять почему возвращает false.zelenin писал(а):нет, она проверяет обладает ли пользователь ролью superadmin