Как настроить глобальный контроль доступа в yii2? - PullRequest
0 голосов
/ 31 октября 2018

у меня AdminController с behavior:

public function behaviors()
{
    return [
        'access' => [
            'class' => AccessControl::className(),
            'rules' => [
                [
                    'actions' => ['login'],
                    'allow' => true,
                    'roles' => ['*'],
                ],
                [
                    'actions' => ['index', 'logout'],
                    'allow' => true,
                    'roles' => ['admin', 'editor', 'expert'],
                ],
                [
                    'actions' => ['update', 'delete'],
                    'allow' => true,
                    'roles' => ['admin'],
                ]
            ]
        ],
        'verbs' => [
            'class' => VerbFilter::className(),
            'actions' => [
                'logout' => ['get'],
            ],
        ],
    ]; 
}

Затем я создаю дочерние контроллеры для:

  • контроллер по умолчанию
  • Контроллер информационных курсов
  • и другие

Как я могу использовать правила для родителя (AdminController), чтобы он работал? Если я добавлю похожие правила в deafult, это будет работать, но глобально нет.

P.S. Я делаю админку и хочу дальше: - любой может попытаться войти - доступ к панели администратора: ['admin', 'editor', 'expert'] - Выйти можно только ['admin', 'editor', 'expert']

Это глобально правила для всех модулей admin с родителем AdminController.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Готово! Я делаю мой AdminController как:

class AdminController extends Controller {

    public function behaviors()
    {
        return [
            'access' => [
                'class' => AccessControl::className(),
                'rules' => [
                    [
                        'allow' => true,
                        'roles' => ['admin', 'editor', 'expert'],
                    ],
                    [
                        'actions' => ['login'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    [
                        'actions' => ['delete'],
                        'allow' => true,
                        'roles' => ['admin'],
                    ]
                ]
            ],
            'verbs' => [
                'class' => VerbFilter::className(),
                'actions' => [
                    'logout' => ['get'],
                ],
            ],
        ]; 
    }
}

и расширяет его для каждого контроллера в admin

0 голосов
/ 31 октября 2018

Если вы расширяете контроллер и затем переопределяете behaviors(), тогда вы обязательно должны включить поведение родителя, например:

return ArrayHelper::merge(parent::behaviors(), [
  // your behaviors here
]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...