Дано:
Есть некоторое количество разноплановых сущностей (компании, инспекции, службы и пр.). Есть пользователи. Сущности связаны с некоторыми из пользователей через связующие таблицы. Привязки могут время от времени меняться. Таблица пользователей не содержит полей для определения роли пользователя, и создание дополнительных таблиц не предполагается.
Необходимо:
Добавить в
Yii::$app->user->identity поле role, которое заполнялось бы во время авторизации пользователя, и, в дальнейшем, использовалось для простой проверки доступа к сущностям (если в таблице связи пользователей и некоторой сущности есть запись с данным UserId - присваиваем пользователю некую роль и когда потребуется проверяем её).
Хотелось бы сделать максимально просто, без использования дополнительных таблиц, без RBAC и расширений.
Проверку связи пользователя (определение его роли) сделать например так:
class User extends ActiveRecord implements IdentityInterface
{
...
public function init()
{
parent::init();
Yii::$app->user->on(WebUser::EVENT_AFTER_LOGIN, [$this, 'assignRole']);
}
public function assignRole()
{
if ($this) {
$this->role = <Role ID>;
...
И получать значение роли в коде так:
if (Yii::$app->user->identity->role == User::SOME_ROLE) {
// Do something
}
Как правильно это сделать?