Есть модель у которой 10 разных статусов. Допустип Page.
Есть 3 группы пользователей, админ, редактор, копирайтер.
Как сделать так что бы Админ мог изменить статью на любой из 10 статусов.
Редактор на 5 из 10 статусов.
Копирайтер на 2 из 10 статусов.
В данный момент я использую такую конструкцию:
Код: Выделить всё
public static function getStatuses(int $user_role = User::CLIENT)
{
switch ($user_role) {
case User::ADMIN:
return [
Page::STATUS_NEW => Yii::t('page', 'New'),
... другие 9 статусов ...
];
case User::EDITOR:
return [
Page::STATUS_NEW => Yii::t('page', 'New'),
... другие 4 статуса ...
];
break;
case User::COPYRIGHTER:
return [
Page::STATUS_NEW => Yii::t('page', 'New'),
Page::STATUS_CANCEL => Yii::t('page', 'Cancel'),
];
break;
}
}
Сейчас нужно отображать соответствующие статусы для каждой роли в редакторе. Так что бы админ видел все. а копир только 2.
Делаю это через статический метод.
Код: Выделить всё
$statuses = Page::getStatuses(Yii::$app->user->identity->role);
Код: Выделить всё
$statuses = Page::getStatuses(Yii::$app->user->identity->role);
if (!in_array($status, $package_statuses)) {
return false;
}
Проблема в том что статусы могут добавиться, роли могут добавить и возможно есть давно готовое решение (паттерн) для таких случаев.