Yii2 Access Control. Авторизация в Yii2. Часть 3

Yii2 Access Control. Авторизация в Yii2

От автора: приветствую вас, друзья. Мы продолжаем цикл статей, посвященных знакомству с фреймворком Yii2. В этой статье мы с вами продолжим работать с фильтром контроля доступа – Yii2 Access Control Filter (ACF). В частности, мы рассмотрим некоторые другие его свойства.

Из прошлой статьи мы узнали, как можно достаточно гибко ограничивать доступ к конкретным контроллерам или даже конкретным действиям этих контроллеров. В этой статье мы пойдем чуть дальше и попробуем добавить некоторые условия, согласно которым мы будем разрешать или запрещать доступ.

Для начала познакомимся со свойством matchCallback. Данное свойство принимаем параметром колбек функцию и, в зависимости от того, что вернет функция, доступ будет разрешен или запрещен. Если функция вернет true – доступ разрешен, false – запрещен. Проверим. Давайте откроем доступ для авторизованных пользователей к контроллеру Default (и ко всем прочим контроллерам, если таковые у вас есть). Ну а к контроллеру Test откроем доступ для всех:

'rules' => [
    [
        'allow' => true,
        'controllers' => ['admin/test'],
    ],
    [
        'controllers' => ['admin/default'],
        'allow' => true,
        'roles' => ['@'],
    ],

],

Yii2 Access Control. Авторизация в Yii2

Теперь неавторизованные пользователи имеют доступ ко всем действиям контроллера Test. Допишем callback-функцию, которая для начала просто вернет false:

[
    'allow' => true,
    'controllers' => ['admin/test'],
    'matchCallback' => function($rule, $action){
        return false;
    }
],

После этого доступ к контроллеру будет закрыт даже для авторизованных пользователей.

Yii2 Access Control. Авторизация в Yii2

Соответственно, если функция вернет true – доступ будет предоставлен. Этим и можно воспользоваться, организуя всевозможные проверки. Возьмем пример из документации и откроем доступ, если сегодня определенная дата:

[
    'allow' => true,
    'controllers' => ['admin/test'],
    'matchCallback' => function($rule, $action){
        return date('d-m') === '23-06';
    }
],

Если сегодня 23 июня, тогда текущий вызов функции date() вернет true и параметр matchCallback также получит true – доступ будет открыт. Мы можем организовать и более полезные проверки. Например, можем реализовать простейшую систему ролей: гость, пользователь, администратор. В данном параметре нам будет достаточно проверить роль авторизованного пользователя и, если это не admin – вернуть false.

Еще одной полезной возможностью будет ограничение доступа по IP, для этого мы можем обратиться к параметру ips. Давайте откроем доступ ко всей админке только для локального IP:

[
    'allow' => true,
    'roles' => ['@'],
    'ips' => ['127.0.0.1'],
],

После этого доступ будет открыт только для указанного адреса IP, все прочие увидят уже знакомую картину:

Yii2 Access Control. Авторизация в Yii2

Таким образом, возможностей Access Control Filter вполне будет достаточно для организации простой системы ролей на сайте. А на сегодня все. Больше о фреймворке вы можете узнать из наших бесплатных или платных уроков. Также создание простейшего блога на Yii2 можно посмотреть в этом цикле уроков.

Самые свежие новости IT и веб-разработки на нашем Telegram-канале

Фреймворк YII2: теория и первая практика

Овладейте азами фреймворка Yii2 за 5 дней!

Получить

Метки:

Комментарии Вконтакте:

Комментарии Facebook:

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *

Можно использовать следующие HTML-теги и атрибуты: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Я не робот.

Spam Protection by WP-SpamFree