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

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

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

Сообщение sanzhikee » 2015.01.28, 00:24

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

буду признателен любому ответу который хотя бы частично откроем мне глаза. На этом все. Спасибо заранее ;)

Аватара пользователя
yiijeka
Сообщения: 3068
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka » 2015.01.28, 08:11

Во вторых: в базе есть поле 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 » 2015.01.28, 09:31

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
Сообщения: 3068
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka » 2015.01.28, 10:39

Хм, разве на Yii1 что-то было иначе?

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin » 2015.01.28, 11:50

yiijeka писал(а):Хм, разве на Yii1 что-то было иначе?
верно, было точно также)

Аватара пользователя
zabachok
Сообщения: 521
Зарегистрирован: 2013.12.16, 14:38

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

Сообщение zabachok » 2015.01.28, 12:34

Имею такое же не понимание как топикстартер.
'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 » 2015.01.28, 12:39

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 » 2015.01.28, 12:52

Личное мне очень помогла разобраться с rbac след. статья:
http://developer.uz/blog/rbac-%D1%80%D0 ... 0%B2-yii2/

Аватара пользователя
zabachok
Сообщения: 521
Зарегистрирован: 2013.12.16, 14:38

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

Сообщение zabachok » 2015.01.28, 13:01

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

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin » 2015.01.28, 13:03

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

Аватара пользователя
zabachok
Сообщения: 521
Зарегистрирован: 2013.12.16, 14:38

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

Сообщение zabachok » 2015.01.28, 13:09

Спасибо большое!
Все становится яснее. Внимательно изучу Ваши примеры!
2b||!2b Just read the instructions

Аватара пользователя
yiijeka
Сообщения: 3068
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka » 2015.01.28, 13:52

Если раньше у меня было одно поле в таблице с ролью и каждый пользователь опирался на него при логине, то теперь все роли в одном файле, который каждый раз грузится в память. А если там 100500 пользователей? 
Используйте базу данных в виде хранилища.

Аватара пользователя
yiijeka
Сообщения: 3068
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka » 2015.01.28, 14:01

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

Аватара пользователя
zabachok
Сообщения: 521
Зарегистрирован: 2013.12.16, 14:38

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

Сообщение zabachok » 2015.01.29, 19:54

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

kukuruku
Сообщения: 1263
Зарегистрирован: 2011.02.14, 11:36

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

Сообщение kukuruku » 2015.01.29, 23:10

не понимаю зачем делать assign через файлы? либо как в yii1 делать юзера с полем роль, или сразу хранить роли в базе данных

Аватара пользователя
yiijeka
Сообщения: 3068
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

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

Сообщение yiijeka » 2015.01.29, 23:34

zabachok писал(а): А перевода нет случайно? :roll:
Тут кратко и суть на русском :)

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin » 2015.01.30, 10:35

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

Alex@
Сообщения: 559
Зарегистрирован: 2014.12.16, 09:24

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

Сообщение Alex@ » 2015.01.31, 13:07

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

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

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

zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

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

Сообщение zelenin » 2015.01.31, 14:32

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

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

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

Alex@
Сообщения: 559
Зарегистрирован: 2014.12.16, 09:24

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

Сообщение Alex@ » 2015.01.31, 14:35

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

Ответить