От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы с вами познакомимся с фильтром контроля доступа – Yii2 Access Control Filter (ACF). Благодаря ACF мы можем реализовать простой контроль доступа к приложению и закрыть, к примеру, администраторскую часть сайта для гостей.
В одной из предыдущих статей мы с вами реализовали модуль админки, который доступен по адресу //yii2/admin. Если сейчас обратиться к нашей админке – мы без проблем в нее попадем, несмотря на то, что мы не авторизованы для этого.
Наша задача – ограничить доступ к этой части приложения и предоставлять его только авторизованным пользователям. Простейшим вариантом здесь будет использование фильтра контроля доступа.
Поскольку в админке может быть множество контроллеров и ко всем им нужно применить одно и то же действие, — это наталкивает нас на мысль прописать нужный код единожды в некоем общем файле, чтобы не дублировать его для каждого контроллера. Таким файлом может быть класс app\modules\admin\Module. Пропишем в нем минимальный код, который можно взять из документации по ACF.
1 2 3 4 5 6 7 8 9 10 11 12 13 |
public function behaviors(){ return [ 'access' => [ 'class' => \yii\filters\AccessControl::className(), 'rules' => [ [ 'allow' => true, 'roles' => ['@'], ], ], ], ]; } |
Что делает данный код? Собственно, он определяет правило, согласно которому доступ к модулю (‘allow’ => true) имеют только авторизованные пользователи (‘roles’ => [‘@’]). Знак @ — это специальный символ, обозначающий авторизованного пользователя. Другой специальный символ — ? – вы можете помнить по статье, в которой мы устанавливали файловый менеджер. Символ ? обозначает гостя.
Теперь попробуем повторно обратиться к админке:
Поскольку мы не авторизованы, фреймворк запрещает доступ к модулю и производит редирект на страницу авторизации. Попробуем авторизоваться с данными для тестового доступа (логин – admin, пароль — admin). После корректного их ввода мы авторизуемся и успешно попадаем в админку.
Собственно, все – мы реализовали простейшее ограничение доступа, используя фильтр контроля доступа Access Control Filter.
Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.