Очередной вопрос по RBAC

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

Очередной вопрос по RBAC

Сообщение raketa »

Собственно ситуация следующая:
есть стандартные роли "гость", "пользователь", "модератор" ..... "администратор"
на каждую роль есть немалое количество операция, для прмера самое простое
Роль "пользователь"
пользователь можеть написать сообщение на форуме
пользователь может оставить комментарий к статье
пользовател может написать на стене другого пользователя
пользователь может оставить заказ
и тд...

Реализовано это как в примере http://yiiframework.ru/doc/cookbook/ru/access.rbac.file

-
Все бы хорошо, но появилась необходимость в запрете некоторым пользователям определенных действий, например запретить пользователю писать новые сообщения на форуме
Вижу несколько вариантов решения
1. Создать роли, например роль "Пользователь который не может писать на форуме" - не подходит т.к. будет слишком много ролей, в которых в дальнейшем трудно будет разобратся, как пример
"Пользователь который не может писать на форуме", "Пользователь который не может писать комментарии", "Пользователь который не может писать на форуме и комментарии", "Пользователь который не может делать заказ" и тд..
2.В таблице users помима поля role создать еще одно, например role_params где в сериализованном виде будет храниттся такие парметры как "разрешино писать на форуме", "разрешено комментировать" и тд.... т.е. своего рода уточняющая инфа к роли "Пользователь"
Проверка доступа будет осуществлятся с бизнес правилом, что то вроде
Yii::app()->user->checkAccess('createPosts',array('role_params'=>$user->role_params))
и само бизнес правило
$arr = json_decode($params["role_params"]);
return (isset($arr['createPosts']) and ($arr['createPosts'] == 1)) or (!isset($arr['createPosts'])
здесь при проверке доступа будет постоянно выполнятся десириализация массива


-
Хотелось бы услышать комментарии
Аватара пользователя
MOTORIST
Сообщения: 245
Зарегистрирован: 2010.06.24, 10:04

Re: Очередной вопрос по RBAC

Сообщение MOTORIST »

Пользователь который не может писать на форуме - не ролей, а операций (например CRUD).
Задача (обобщение операций) - управление форумом.
Роль - посетитель.
В роль ты можешь "напихать" сразу же операции.

P.S. согласен с тем, что отрицания в RBAC не хватает. Поэтому приходиться придумывать костыли.
В сознании новичка много возможностей, в сознании эксперта — лишь несколько.
raketa
Сообщения: 131
Зарегистрирован: 2011.07.28, 17:29

Re: Очередной вопрос по RBAC

Сообщение raketa »

MOTORIST писал(а):Пользователь который не может писать на форуме - не ролей, а операций (например CRUD).
Задача (обобщение операций) - управление форумом.
Роль - посетитель.
В роль ты можешь "напихать" сразу же операции.
Ну это и будет костыль "Пользователь который не может писать на форуме" - по сути это роль "Пользователь" где есть множество операций, за исключением создать новый пост на форуме

MOTORIST писал(а):P.S. согласен с тем, что отрицания в RBAC не хватает. Поэтому приходиться придумывать костыли.
Хотелось именно услышать опыт создания этих костылей .
Ответить