Где проверять статус пользователя и как правильно?

Всё про контроль доступа пользователей: фильтры, RBAC, проверки
Ответить
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Где проверять статус пользователя и как правильно?

Сообщение porcelanosa »

Вопрос такой:
Есть RBAC у пользователя есть статусы - PENDING, APPROVED, ACTIVE.
статусы к ролям не имею отношения.
Роль назначается на стадии PENDING или APPROVED.
Как правильно и где можно проверить доп. параметр доступа.
Т.е. большинство действий возможные в соответствию с ролью , естественно доступны, только при статусе ACTIVE -

Проверять в каждом action не хотелось бы.
Или может хотя бы в одно место вынести, типа AccessFilter или типа того?
Какие best practices бытуют?
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Где проверять статус пользователя и как правильно?

Сообщение samdark »

В RBAC rule, который крепится где-то между ролью и action.
Аватара пользователя
porcelanosa
Сообщения: 570
Зарегистрирован: 2010.03.16, 04:31
Откуда: Москва

Re: Где проверять статус пользователя и как правильно?

Сообщение porcelanosa »

samdark писал(а): 2021.05.23, 17:21 В RBAC rule, который крепится где-то между ролью и action.
А как-то можно поподробнее?
У нас, к примеру, может не быть роли допустим у пользователя со статусом Pending
mcintosh-club.ru - первый мой сайт с использование Yii //
Акустика Sonus Faber Hi-End класса//
Необрезная доска и другие пиломатериалы
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Где проверять статус пользователя и как правильно?

Сообщение samdark »

Код: Выделить всё

class UserStatusRule extends Rule
{

    public function execute($user, $item, $params)
    {
        return !Yii::$app->user->isGuest && $user->status === User::STATUS_ACTIVE;
    }
}
Ну и далее прицепить этот Rule в иерархии RBAC в любом месте между ролью и permission-ом.
Ответить