AccessControl не могу найти ошибку.

Обсуждение документации второй версии фреймворка. Переводы Cookbook и авторские рецепты.
Закрыто
mvladimir
Сообщения: 9
Зарегистрирован: 2014.05.01, 11:49

AccessControl не могу найти ошибку.

Сообщение mvladimir »

Добрый день.

Вроде ничего сложного не должно быть, но я никак не пойму где я туплю.
В модели User.php у меня есть 3 роли:

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

const ROLE_SUPERADMIN = 1;
const ROLE_ADMIN = 2;
const ROLE_USER = 10;
 
В контроллере модуля Users в backend у меня простой кусок кода:

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

namespace backend\modules\users\controllers;

use Yii;
use yii\filters\AccessControl;
use yii\web\Response;
use yii\web\HttpException;
use common\modules\users\models\User;

class DefaultController extends Controller
{
public function behaviors()
{
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => [User::ROLE_SUPERADMIN, User::ROLE_ADMIN]
                    ]
                ]
            ]
        ];
}
 
У меня есть пользователь с ролью ROLE_SUPERADMIN, но я не могу получить доступ к данному модулю, для этого пользователя всегда Forbidden (#403).
Помогите, пожалуйста, найти мой бок.
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: AccessControl не могу найти ошибку.

Сообщение maleks »

Почитайте в доках про Авторизацию:
http://www.yiiframework.com/doc-2.0/gui ... ation.html

там поймете, о каких ролях ведется речь.
mvladimir
Сообщения: 9
Зарегистрирован: 2014.05.01, 11:49

Re: AccessControl не могу найти ошибку.

Сообщение mvladimir »

Насколько я понял из документации, если у меня не настроен rbac я могу использовать только стандартные роли: '?' и '@'.
Если я настрою rbac я могу проверять доступ только через такую конструкцию:

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

if (\Yii::$app->user->can('createPost')) {
    // create post
}
 
т.е. я в любом случае не могу использовать AccessControl и мои кастомные роли таким образом:

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

return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => [User::ROLE_SUPERADMIN, User::ROLE_ADMIN]
                    ]
                ]
            ]
        ];
 
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: AccessControl не могу найти ошибку.

Сообщение zelenin »

у меня наводящий вопрос, который поможет объяснить вам эту тему: вы пишете "У меня есть пользователь с ролью ROLE_SUPERADMIN" - как вы определили, что у вас есть такой пользователь?
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: AccessControl не могу найти ошибку.

Сообщение maleks »

mvladimir, вы пошли путем такого себе упрошенного RBAC.
Эти вещи не новы и по ним хватает рецептов, правда для yii1, например этот.
Смысл в том что вы переопределите у себя user->can на проверку не через RBAC, а по своей логике. И фильтры естественно подхватят.
mvladimir
Сообщения: 9
Зарегистрирован: 2014.05.01, 11:49

Re: AccessControl не могу найти ошибку.

Сообщение mvladimir »

zelenin писал(а):у меня наводящий вопрос, который поможет объяснить вам эту тему: вы пишете "У меня есть пользователь с ролью ROLE_SUPERADMIN" - как вы определили, что у вас есть такой пользователь?
Да вы правы, моя проблема была в том что я не создал запись в таблице auth_assignment. Я настроил rbac для работы с DB.
Правда меня смущает то что в таблице user есть поле role, для чего оно тогда? Если пользователь привязывается к группе в таблице auth_assignment, а группы хранятся в таблице auth_item. Я порядком запутался, а информации по rbac + DB для yii2 я особо не нашел. Конечно я может плохо искал. Если есть какие-то ссылки поделитесь, пожалуйста.
maleks писал(а):mvladimir, вы пошли путем такого себе упрошенного RBAC.
Извините, но я не совсем понял ваше замечание. Вы имеете ввиду что я свернул не туда?
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: AccessControl не могу найти ошибку.

Сообщение zelenin »

mvladimir писал(а):Правда меня смущает то что в таблице user есть поле role, для чего оно тогда? Если пользователь привязывается к группе в таблице auth_assignment, а группы хранятся в таблице auth_item. Я порядком запутался, а информации по rbac + DB для yii2 я особо не нашел.
правильно поняли мой наводящий вопрос - роль у юзера та, что хранится в auth_*-таблицах.
А почему у вас role в модели User, это вас надо спросить) В вашей конфигурации этот атрибут не играет роли.

https://github.com/zelenin/yii2-rbac-module
Воспользуйтесь моим модулем - он как раз поможет связать атрибут User и auth_assignment и всю грязную работу возьмет на себя - вам только нужно будет составить древо прав в rbac.php
mvladimir
Сообщения: 9
Зарегистрирован: 2014.05.01, 11:49

Re: AccessControl не могу найти ошибку.

Сообщение mvladimir »

Всем спасибо за помощь.
Закрыто