Продолжаю цикл статей в категории Yii2. Во фреймворке выстроена достаточно гибкая система прав и доступа к определенным разделам сайта. Мы можем ограничить определенным пользователям доступ как к конкретным страницам, так и действиям, например редактирование, удаление, просмотр. Это можно сделать как в конкретном контроллере, так и во всем приложении. Давайте рассмотрим для начала первый вариант, где мы ограничим действия для неавторизованных пользователей.
Вверху каждого контроллера по умолчанию прописаны какие-то поведения (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' => ['@'],
],
],
], |
'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' => ['@'],
],
],
], |
// Доступ только авторизованным пользователям
'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 для компании, то доступ посторонним ограничивать нужно обязательно, чтобы избежать нежелательной утечки информации.
Добавить комментарий