Здравствуйте господа знатоки.
Для редактирования статей в блоге есть 3 роли, редактор, админ и автор. (rbac)
При создании статьи статус = новая.
При создании автор может создать и потом отредактировать на статус = отмена
У редактора есть возможность поставить статус как у атора + статус = опубликована.
У админа есть все эта статусы + статус = проверена.
Как сделать так что бы автор видел 2 статуса, редактор 3 и админ 4 статуса?
Спасибо.
Статусы и rbac
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Статусы и rbac
Привязывайте статусы к разрешениям и формируйте список используя user->can(...). Этот вариант позволяет безболезненно добавлять новые роли, список всегда будет корректным.
Re: Статусы и rbac
То есть на каждый статус добавлять if? Такой вариант не годится. Каждый раз переписывать класс это не наш метод.yiiliveext писал(а): ↑2019.09.27, 14:36 Привязывайте статусы к разрешениям и формируйте список используя user->can(...). Этот вариант позволяет безболезненно добавлять новые роли, список всегда будет корректным.
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Статусы и rbac
Статусы хранятся как константы класса. Не понял ход ваших мыслей, возможно пример псевдокода поможет, буду признателен.yiiliveext писал(а): ↑2019.09.30, 15:41В цикле по списку статусов. Конкретика зависит от того как вы храните статусы.
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Статусы и rbac
На самом деле, при таком раскладе вам все равно надо будет лезть в класс при изменении статусов. У вас же еще наверняка есть методы вроде getStatusName() и getStatusList(). Но не суть, вернемся к проблеме. Допустим у вас есть метод getBaseStatusList(), который возвращает массив наименований статусов ['New', 'Published', 'Approved', 'Canceled']. Тогда код будет выглядеть примерно такChelobaka писал(а): ↑2019.09.30, 21:16Статусы хранятся как константы класса. Не понял ход ваших мыслей, возможно пример псевдокода поможет, буду признателен.yiiliveext писал(а): ↑2019.09.30, 15:41В цикле по списку статусов. Конкретика зависит от того как вы храните статусы.
Код: Выделить всё
$statuses = [];
$postStatuses = getBaseStatusList();
foreach ($postStatuses as $postStatus) {
if (\Yii::$app->user->can('setPostStatus' . $postStatus) {
$statuses[] = $postStatus;
}
}
Ну и назначаем ролям в соответствии с иерархией. При изменении/добавлении ролей/статусов просто добавляем/назначаем/отзываем соответствующие разрешения.
Re: Статусы и rbac
насколько я понял что то хранить в константах вообще не вариант.
-
- Сообщения: 910
- Зарегистрирован: 2019.08.13, 01:49
Re: Статусы и rbac
Почему, если список статусов статический или условно-статический, то это отличное решение. Работает быстро, хорошо читается в коде. А вот если динамический, да еще может произвольно редактироваться пользователем, да еще и мультиязычный, то тогда да, лучше хранить извне. Хотя при этом те же базовые статусы можно прописывать константами.