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

    Комментариев нет 286

notautirized

Продолжаю цикл статей в категории Yii2. Во фреймворке выстроена достаточно гибкая система прав и доступа к определенным разделам сайта. Мы можем ограничить определенным пользователям доступ как к конкретным страницам, так и действиям, например редактирование, удаление, просмотр. Это можно сделать как в конкретном контроллере, так и во всем приложении. Давайте рассмотрим для начала первый вариант, где мы ограничим действия для неавторизованных пользователей.

Телеграм-канал serblog.ru

Вверху каждого контроллера по умолчанию прописаны какие-то поведения (behaviors). В них необходимо добавить массив access и перечислить в нем действия, которые хотим запретить и для кого.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
'access' => [
                'class' => AccessControl::className(),
                'only' => ['logout', 'signup'],
                'rules' => [
                    [
                        'actions' => ['signup'],
                        'allow' => true,
                        'roles' => ['?'],
                    ],
                    [
                        'actions' => ['logout' , 'confirm-email', 'reset-password'],
                        'allow' => true,
                        'roles' => ['@'],
                    ],
                ],
            ],

Для экшена signup мы разрешаем доступ к неавторизованным пользователям. Ко всем остальным страницам этого контроллера доступ для них будет закрыт.

? — неавторизованные пользователи
@ — все авторизованные

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

Закрываем доступ ко всем разделам сайта в Yii2

Нам потребуется файл main.php, который лежит по пути: common\config\ В самый низ этого файла пишем специальный блок кода:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
// Доступ только авторизованным пользователям
    'as beforeRequest' => [
        'class' => 'yii\filters\AccessControl',
        'except' => ['confirm', 'reset-password'], //
        // Разрешить доступ неавторизованным для экшена (например confirm)
        'rules' => [
            [
                'actions' => ['login', 'signup', 'confirm', 'reset-password', 'request-password-reset', 'ajax-select'],
                'allow' => true,
            ],
            [
 
                'allow' => true,
                'roles' => ['@'],
            ],
        ],
    ],

Таким образом, если пользователь не авторизован, то при попытке зайти на какую-либо страницу, кроме тех, которые перечислены в правилах, то его перебросит на страницу login. Это бывает необходимо, когда вы разрабатываете корпоративную систему или CRM для компании, то доступ посторонним ограничивать нужно обязательно, чтобы избежать нежелательной утечки информации.

Любая сумма на развитие сайта

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

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