Сегодня мы разберём третий раздел работы с RBAC в Yii 2, а именно так называемые «разрешения».
Понятие разрешения
Разрешение (permission) – это право пользователя на выполнение того или иного конкретного действия в системе. Например, создание раздела или записи на сайте, просмотр какого-то раздела, добавление комментария к статье и т.д.
Разрешения позволяют более тонко настроить доступ к web приложению, чем роли, т.к. они в отличие от роли привязаны к конкретным действиям на сайте.
Создание разрешений
Разрешения создаются аналогично ролям [1], только с использованием метода addPermission.
$test = $authManager->createPermission('test'); $authManager->add($test);
Добавление разрешений
Разрешения можно добавить как роли, так и непосредственно конкретному пользователю.
Добавление разрешения к роли выполняется при помощи метода addChild.
$authManager->addChild($userRole, $test);
Добавление разрешения напрямую пользователю производится при помощи метода assign, только в место роли первым параметром передаётся разрешение.
Yii::$app->authManager->assign($permission, $userId);
Проверка разрешений
Разрешение проверяются также каr и роли при помощи метода can.
if(Yii::$app->user->can('testr')) { // Делаем что-то }
Если разрешения используются для управления доступом к действиям контроллера и имя разрешения и действия совпадают, то можно выполнять проверку в методе beforeAction контроллера.
public function beforeAction($action) { if (parent::beforeAction($action)) { if (!\Yii::$app->user->can($action->id)) { throw new ForbiddenHttpException('Access denied'); } return true; } else { return false; } }
Если для управления доступом к действиям контроллера используются только разрешения и проверка реализована с применением метода beforeAction, то в методе behaviors контроллера можно убрать правило access, так как оно актуально в первую очередь для ролей и в данном случае будет только дублировать функционал реализованный в beforeAction.
В остальных случаях проверка разрешений в правиле access выполняется также, как и для ролей [1].
Итак, мы познакомились с разрешениями. Они позволяют выполнять более тонкую настройку доступа в web приложении. Следующая и, вероятнее всего, последняя часть данного цикла статей будет посвящена механизму наследования ролей.
Источники:
- Настраиваем доступ к web приложению на основе ролей Yii 2. Часть 1. Общие механизмы работы.