Контроль доступа в рамках модуля: одноименные действия из разных контроллеров

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
vo.wonder
Сообщения: 2
Зарегистрирован: 2017.02.16, 23:18

Контроль доступа в рамках модуля: одноименные действия из разных контроллеров

Сообщение vo.wonder »

Здравствуйте. Я - начинающий, так что сильно не пинайте. Использую шаблон "basic". Ситуация у меня такая:
Я создал модуль "Admin". В этом модуле осуществляется администрирование фотоальбомов (контроллер AlbumController) и аутентификация администратора (без RBAC, просто "гость/не гость"; контроллер UserController). Аутентификация работает, всё прекрасно. Теперь мне нужно разграничить в правах гостей и админа. Поэтому в файле модуля /modules/admin/Module.php я пишу такое поведение:

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

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'actions' => ['login'],
                        'roles' => ['?'],
                    ],
                    [
                        'allow' => true,
                        'actions' => ['logout', 'index'],
                        'roles' => ['@']
                    ]
                ],
            ]
        ];
    }
Хочу обратить ОСОБОЕ ВНИМАНИЕ на список действий: я почему-то считал, что вполне очевидным было бы именовать их так: '/admin/user/login'. Или так: 'user/login'. В результате я всякий раз получал 403 ошибку, пока случайно не оставил просто имена действий, как если бы я писал поведение в рамках контроллера. В итоге всё работает так, как я хочу. Но что делать, если, например, и у AlbumController, и у UserController будет действие с одинаковым именем, скажем, 'actionIndex'? Как мне в таком случае указать в правилах, действие какого именно контроллера я хочу запретить для гостя, а какое - разрешить?
Надеюсь, внятно объяснил суть проблемы. Заранее благодарен.
Ответить