RBCA: Пользователи, роли, база данных.

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
sanzhikee
Сообщения: 14
Зарегистрирован: 2014.12.04, 15:15

RBCA: Пользователи, роли, база данных.

Сообщение sanzhikee »

Вопрос такой, я храню пользователей в таблице user, создаю модель users, со всеми полями, валидацией и так далее. Теперь я начинаю путаться и не знать, что мне делать.
Во первых: как привязать бд и authmanager? То есть чтобы когда было действие login -> он проверяет на наличие в базе данных соответствие по паролю.
Во вторых: в базе есть поле role, как в контроллере в AccessControl проверять пользователя по правам?

буду признателен любому ответу который хотя бы частично откроем мне глаза. На этом все. Спасибо заранее ;)
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: RBCA: Пользователи, роли, база данных.

Сообщение yiijeka »

Во вторых: в базе есть поле role, как в контроллере в AccessControl проверять пользователя по правам?
Скорее всего вы это поля не добавляли, так как не знаете, что с ним делать. А в текущей версии это поле выпилили - удалите его и у себя.
https://github.com/yiisoft/yii2-app-adv ... d023a967db
Во первых: как привязать бд и authmanager? То есть чтобы когда было действие login -> он проверяет на наличие в базе данных соответствие по паролю.
Привязывать ничего не нужно, нужно создать место где вы будете назначать пользователям роли - через команду

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

$auth->assign($admin, 1); // 1= id администратора в базе данных, $admin - роль администратора в rbac 
Все проверки выполняются в AccessControl

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

public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['create', 'update'],
                'rules' => [
                    [
                        'actions' => ['create', 'update'],
                        'allow' => true,
                        'roles' => ['edit'], // ТУТ, всегда проверяется не роль пользователя, а операция - разрешение на одно или несколько действий!
                    ],
                ]
            ],
        ];
    } 
sanzhikee
Сообщения: 14
Зарегистрирован: 2014.12.04, 15:15

Re: RBCA: Пользователи, роли, база данных.

Сообщение sanzhikee »

yiijeka писал(а):
Во вторых: в базе есть поле role, как в контроллере в AccessControl проверять пользователя по правам?
Скорее всего вы это поля не добавляли, так как не знаете, что с ним делать. А в текущей версии это поле выпилили - удалите его и у себя.
https://github.com/yiisoft/yii2-app-adv ... d023a967db
Во первых: как привязать бд и authmanager? То есть чтобы когда было действие login -> он проверяет на наличие в базе данных соответствие по паролю.
Привязывать ничего не нужно, нужно создать место где вы будете назначать пользователям роли - через команду

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

$auth->assign($admin, 1); // 1= id администратора в базе данных, $admin - роль администратора в rbac  
Все проверки выполняются в AccessControl

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

public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'only' => ['create', 'update'],
                'rules' => [
                    [
                        'actions' => ['create', 'update'],
                        'allow' => true,
                        'roles' => ['edit'], // ТУТ, всегда проверяется не роль пользователя, а операция - разрешение на одно или несколько действий!
                    ],
                ]
            ],
        ];
    }
спасибо за ответ! Но меня не покидает ошушение, что все легче) или я просто не могу викинуть из головы авторизацию на yii1)
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: RBCA: Пользователи, роли, база данных.

Сообщение yiijeka »

Хм, разве на Yii1 что-то было иначе?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: RBCA: Пользователи, роли, база данных.

Сообщение zelenin »

yiijeka писал(а):Хм, разве на Yii1 что-то было иначе?
верно, было точно также)
Аватара пользователя
zabachok
Сообщения: 522
Зарегистрирован: 2013.12.16, 14:38

Re: RBCA: Пользователи, роли, база данных.

Сообщение zabachok »

Имею такое же не понимание как топикстартер.
'roles' => ['edit'], // ТУТ, всегда проверяется не роль пользователя, а операция - разрешение на одно или несколько действий!
почему тут операция, а не роль? И что здесь означает операция?
В yii1 я делал так:
'roles' =>array(User::ROLE_ADMIN),
Друзья, может кто-то сможет написать статью об этом? Что-то вроде этой http://www.yiiframework.ru/doc/cookbook ... .rbac.file
2b||!2b Just read the instructions
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: RBCA: Пользователи, роли, база данных.

Сообщение zelenin »

zabachok писал(а): почему тут операция, а не роль? И что здесь означает операция?
в rbac есть две сущности, присваиваемые юзеру - role и permission (в yii1 первом были role, task, operation). Роль - это админ, модер, менеджер, автор итд. Разрешение - это "писать посты", "редактировать заказы" итд.
в 'roles' можно прописывать любые эти сущности, но правильнее все проверки делать с помощью permission, что получается более гибко.
zabachok писал(а): В yii1 я делал так:
'roles' =>array(User::ROLE_ADMIN),
аналогично и тут делаете. только повторюсь, правильнее проверять не через роль, а через разрешение.
Аватара пользователя
Dzhemal
Сообщения: 20
Зарегистрирован: 2014.11.18, 12:00

Re: RBCA: Пользователи, роли, база данных.

Сообщение Dzhemal »

Личное мне очень помогла разобраться с rbac след. статья:
http://developer.uz/blog/rbac-%D1%80%D0 ... 0%B2-yii2/
Аватара пользователя
zabachok
Сообщения: 522
Зарегистрирован: 2013.12.16, 14:38

Re: RBCA: Пользователи, роли, база данных.

Сообщение zabachok »

Все больше проясняется.
Там есть такой фрагмент:
Привязка ролей к пользователю ... делается 1 раз. RBAC сохранит данные в auth_assignment и будет подхватывать роль автоматически при авторизации пользователя
Я заметил создается файл assignments.php в котором массив соответствия пользователей и их ролей. Назначить другую роль пользователю не получается.
А как на счет производительности? Если раньше у меня было одно поле в таблице с ролью и каждый пользователь опирался на него при логине, то теперь все роли в одном файле, который каждый раз грузится в память. А если там 100500 пользователей?
Или я снова не понимаю?
2b||!2b Just read the instructions
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: RBCA: Пользователи, роли, база данных.

Сообщение zelenin »

zabachok писал(а):Все больше проясняется.
Там есть такой фрагмент:
Привязка ролей к пользователю ... делается 1 раз. RBAC сохранит данные в auth_assignment и будет подхватывать роль автоматически при авторизации пользователя
Я заметил создается файл assignments.php в котором массив соответствия пользователей и их ролей. Назначить другую роль пользователю не получается.
А как на счет производительности? Если раньше у меня было одно поле в таблице с ролью и каждый пользователь опирался на него при логине, то теперь все роли в одном файле, который каждый раз грузится в память. А если там 100500 пользователей?
Или я снова не понимаю?
тут вы верно понимаете, поэтому я сделал такой модуль https://github.com/zelenin/yii2-rbac-module
тут assign делается не на основе данных из файла, а на лету, завися от поля в БД (колонка user.role) - так делалось обычно в yii1.
Аватара пользователя
zabachok
Сообщения: 522
Зарегистрирован: 2013.12.16, 14:38

Re: RBCA: Пользователи, роли, база данных.

Сообщение zabachok »

Спасибо большое!
Все становится яснее. Внимательно изучу Ваши примеры!
2b||!2b Just read the instructions
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: RBCA: Пользователи, роли, база данных.

Сообщение yiijeka »

Если раньше у меня было одно поле в таблице с ролью и каждый пользователь опирался на него при логине, то теперь все роли в одном файле, который каждый раз грузится в память. А если там 100500 пользователей? 
Используйте базу данных в виде хранилища.
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: RBCA: Пользователи, роли, база данных.

Сообщение yiijeka »

И "всякие статьи" дают ошибочные сведения - Yii2 rbac следует стандарту - http://csrc.nist.gov/rbac/sandhu-ferraiolo-kuhn-00.pdf . Но вы конечно же не будете это читать, а искать модули типа yii-admin и статьи из блогов, где нарушают стандарт.
Аватара пользователя
zabachok
Сообщения: 522
Зарегистрирован: 2013.12.16, 14:38

Re: RBCA: Пользователи, роли, база данных.

Сообщение zabachok »

yiijeka писал(а):И "всякие статьи" дают ошибочные сведения - Yii2 rbac следует стандарту - http://csrc.nist.gov/rbac/sandhu-ferraiolo-kuhn-00.pdf . Но вы конечно же не будете это читать, а искать модули типа yii-admin и статьи из блогов, где нарушают стандарт.
А перевода нет случайно? :roll:
2b||!2b Just read the instructions
kukuruku
Сообщения: 1318
Зарегистрирован: 2011.02.14, 11:36

Re: RBCA: Пользователи, роли, база данных.

Сообщение kukuruku »

не понимаю зачем делать assign через файлы? либо как в yii1 делать юзера с полем роль, или сразу хранить роли в базе данных
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: RBCA: Пользователи, роли, база данных.

Сообщение yiijeka »

zabachok писал(а): А перевода нет случайно? :roll:
Тут кратко и суть на русском :)
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: RBCA: Пользователи, роли, база данных.

Сообщение zelenin »

kukuruku писал(а):не понимаю зачем делать assign через файлы?
в PhpManger через файлы, в DbManager через базу.
kukuruku писал(а):либо как в yii1 делать юзера с полем роль
вообще так было принято при использовании PhpManager, но это не являлось именно yii-требованием, а было не совсем правильным хаком. Также можно и в yii2 сделать.
kukuruku писал(а):сразу хранить роли в базе данных
DbManager
Alex@
Сообщения: 568
Зарегистрирован: 2014.12.16, 09:24

Re: RBCA: Пользователи, роли, база данных.

Сообщение Alex@ »

я использую DbManager
есть один пользователь с ролью superadmin
при попытке проверить

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

If (Yii::$app->user->can('superadmin')) { … }
получается что функция can проверяет имеет ли право пользователь на какие -либо действия, которые прописаны в behaviors()???
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: RBCA: Пользователи, роли, база данных.

Сообщение zelenin »

Alex@ писал(а):я использую DbManager
есть один пользователь с ролью superadmin
при попытке проверить

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

If (Yii::$app->user->can('superadmin')) { … } 
получается что функция can проверяет имеет ли право пользователь на какие -либо действия, которые прописаны в behaviors()???
нет, она проверяет обладает ли пользователь ролью superadmin
Alex@
Сообщения: 568
Зарегистрирован: 2014.12.16, 09:24

Re: RBCA: Пользователи, роли, база данных.

Сообщение Alex@ »

zelenin писал(а):нет, она проверяет обладает ли пользователь ролью superadmin
У меня в таблице БД auth_assignment пользователь привязан к роли superadmin, я не могу понять почему возвращает false.
Ответить