AccessControl для модуля

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
backend
Сообщения: 15
Зарегистрирован: 2017.10.29, 11:53

AccessControl для модуля

Сообщение backend »

Народ, привет! Народ, хелп!
Имеется: yii2 - basic
Цель: реализовать несколько модулей для работы авторизованных юзеров, грубо говоря, админки разного назначения.
Через gii создал модуль manager, в конфиге web.php добавил

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

'modules' => [
        'manager' => [
            'class' => 'app\modules\manager\Module',
            'components' => [
                'user' => [
                    'identityClass' => 'app\modules\manager\models\User',
                    'class' => '',
                    'enableAutoLogin' => true,
                    'loginUrl' => ['manager/login'], 
                    'identityCookie' => [
                        'name' => '_manager_identity',
                        'httpOnly' => true
                    ]
                ]
            ]
        ],
    ],
Затем в файле модуля Module.php пытаюсь установить правила доступа к разделу manager типа

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

public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],
        ];
    }
При попытке зайти на страницу меня перебрасывает на дефолтный маршрут авторизации site/login, но мне-то надо сюда 'loginUrl' => ['manager/login']. Явно, что AccessControl цепляет правила для стандартного User...так почему же настройки в web.php не переопределяют этого правила???

Заранее благодарен любой полезной информации!
Аватара пользователя
ElisDN
Сообщения: 5841
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: AccessControl для модуля

Сообщение ElisDN »

Вы конфигурируете $module->user, а AccessControl вызывает Yii::$app->user.
backend
Сообщения: 15
Зарегистрирован: 2017.10.29, 11:53

Re: AccessControl для модуля

Сообщение backend »

ElisDN писал(а): 2017.10.29, 14:45 Вы конфигурируете $module->user, а AccessControl вызывает Yii::$app->user.
то есть вся проблема в том, что в конфиге модуля я указал

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

 'components' => [
                'user' => [
а надо указать например

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

 'components' => [
                'manager' => [
                
да??
Аватара пользователя
ElisDN
Сообщения: 5841
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: AccessControl для модуля

Сообщение ElisDN »

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

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'user' => $this->user,
            'rules' => [ ... ],
        ],
    ];
}
backend
Сообщения: 15
Зарегистрирован: 2017.10.29, 11:53

Re: AccessControl для модуля

Сообщение backend »

ReflectionException
Class does not exist
...и целая портянка ошибок(((

В общем, решено!
В конфиге web указываю лишь

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

 'modules' => [
        'manager' => [
            'class' => 'app\modules\manager\Module',
        ],
    ]
а в файле модуля Module в функции init() 'перезагружаю' настройки приложения, касательно части авторизации

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

Yii::$app->set('user', [
            'class' => 'yii\Web\User',
            'identityCookie' => ['name' => '_adm', 'httpOnly' => true],
            'idParam' => '__adm_id',
            'identityClass'  => 'app\modules\manager\models\User',
            'loginUrl' => ['manager/auth/login'],
            'enableAutoLogin' => true
        ]);
identityCookie редактируется для разграничения пользователей в разных админ-панелях (у меня их несколько)

Ну а в базовом контроллере модуля делаю следующее

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

public function behaviors(){
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                    [
                        'actions' => ['login'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                ],
            ],
        ];
    }
дабы срабатывали редиректы для входа в админку
Ответить