Собственно ситуация следующая:
есть стандартные роли "гость", "пользователь", "модератор" ..... "администратор"
на каждую роль есть немалое количество операция, для прмера самое простое
Роль "пользователь"
пользователь можеть написать сообщение на форуме
пользователь может оставить комментарий к статье
пользовател может написать на стене другого пользователя
пользователь может оставить заказ
и тд...
Реализовано это как в примере 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'])
здесь при проверке доступа будет постоянно выполнятся десириализация массива
-
Хотелось бы услышать комментарии
Очередной вопрос по RBAC
Re: Очередной вопрос по RBAC
Пользователь который не может писать на форуме - не ролей, а операций (например CRUD).
Задача (обобщение операций) - управление форумом.
Роль - посетитель.
В роль ты можешь "напихать" сразу же операции.
P.S. согласен с тем, что отрицания в RBAC не хватает. Поэтому приходиться придумывать костыли.
Задача (обобщение операций) - управление форумом.
Роль - посетитель.
В роль ты можешь "напихать" сразу же операции.
P.S. согласен с тем, что отрицания в RBAC не хватает. Поэтому приходиться придумывать костыли.
В сознании новичка много возможностей, в сознании эксперта — лишь несколько.
Re: Очередной вопрос по RBAC
Ну это и будет костыль "Пользователь который не может писать на форуме" - по сути это роль "Пользователь" где есть множество операций, за исключением создать новый пост на форумеMOTORIST писал(а):Пользователь который не может писать на форуме - не ролей, а операций (например CRUD).
Задача (обобщение операций) - управление форумом.
Роль - посетитель.
В роль ты можешь "напихать" сразу же операции.
Хотелось именно услышать опыт создания этих костылей .MOTORIST писал(а):P.S. согласен с тем, что отрицания в RBAC не хватает. Поэтому приходиться придумывать костыли.