yii2-db-rbac icon indicating copy to clipboard operation
yii2-db-rbac copied to clipboard

Добавление поддержки правил

Open xloading opened this issue 9 years ago • 4 comments

Здравствуйте!

Подскажите пожалуйста, планируете ли вы добавить также интерфейс для привязки к привилегиям правил (http://www.yiiframework.com/doc-2.0/guide-security-authorization.html#using-rules)? Сейчас эта часть модели RBAC является непокрытой вашим интерфейсом, насколько я могу судить.

Также, мне кажется, имеет место быть путаница в переводе: почему-то permission у вас переводится как правило, хотя по идее это привилегия.

Спасибо!

xloading avatar Sep 08 '15 20:09 xloading

Честно говоря не думала добавлять поддержку rules, т.к модуль сейчас устроен так, что вам не нужно понимать особенности работы Rbac и для создания новой роли или разрешения, быть программистом. Идея модуля в том, чтобы менять доступы не меняя ничего в коде. Для правил нужно создавать отдельный класс и программно задавать условия выполнения правила в зависимости от структуры вашего приложения и потребностей. Мне кажется проще привязать такое правило один раз из кода в тех проектах где это нужно, чем вводить в заблуждение такой опцией всех остальных. Наличие модуля никак не меняет прямую работу с Yii::$app->authManager. Но я не буду закрывать вопрос и подумаю над тем, чтобы генерировать классы для правил автоматически, а в интерфейсе модуля сделать визуальный конструктор правил. Спасибо за идею.

developeruz avatar Sep 09 '15 08:09 developeruz

Эльвира, большое спасибо за развёрнутый ответ! Думаю, в этом случае задача с автоматической генерацией классов правил и визуальным конструктором чересчур трудоёмка и вряд ли имеет смысл для вашей концепции. Я задал этот вопрос скорее из-за отсутствия какого-либо опыта работы с RBAC в Yii и исключительно в свете прочтения главы про правила из документации. Мне показалось, что это и есть "канонический" путь ограничения роли и только ему и стоит следовать. А вы не могли бы проиллюстрировать, как в концепции вашего модуля оптимально реализовать ограничение наподобие updateOwnPost? Допустим, я создал permission на post/update и привязал его к роли author. Как действовать дальше? Просто явным образом проверять условие, аналогичное условию правила, в actionUpdate? Ещё раз спасибо!

xloading avatar Sep 09 '15 09:09 xloading

Модуль вам в этом случаи не поможет. Тут вы только можете дать доступ к post/update для какой-то роли или не дать его. Более тонкую логику в любом случаи нужно реализовывать в коде. Так что да:

  • либо делать правило и привязывать его в коде (не через интерфейс модуля) и проверять через can()
  • либо прописывать бизнес-правило в AccessControl контроллера (через denyCallback)
  • либо делать if-проверку в начале нужного action или в методе beforeAction

developeruz avatar Sep 09 '15 10:09 developeruz

Добрый день, у Вас обнаружены логические ошибки в отправках запроса:

файл: developeruz\db_rbac\views\user\view.php строка: 10 [**"update"**, 'id' => $user->getId()]]); ?>

файл: developeruz\db_rbac\controllers\UserController строка: 87 return $this->redirect(Url::to(["view", 'id' => $user->getId()]));

Уберите полные пути в урл, у меня модуль находится в модуле admin. Спасибо огромное, буду поддерживать Вас в разработки.

astapb74 avatar Oct 07 '16 16:10 astapb74