Настраиваем доступ к web приложению на основе ролей Yii 2. Часть 3. Разрешения

Сегодня мы разберём третий раздел работы с 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 приложении. Следующая и, вероятнее всего, последняя часть данного цикла статей будет посвящена механизму наследования ролей.

Источники:
  1. Настраиваем доступ к web приложению на основе ролей Yii 2. Часть 1. Общие механизмы работы.
Добавить комментарий

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