yii2-db-rbac
yii2-db-rbac copied to clipboard
Добавление поддержки правил
Здравствуйте!
Подскажите пожалуйста, планируете ли вы добавить также интерфейс для привязки к привилегиям правил (http://www.yiiframework.com/doc-2.0/guide-security-authorization.html#using-rules)? Сейчас эта часть модели RBAC является непокрытой вашим интерфейсом, насколько я могу судить.
Также, мне кажется, имеет место быть путаница в переводе: почему-то permission у вас переводится как правило, хотя по идее это привилегия.
Спасибо!
Честно говоря не думала добавлять поддержку rules, т.к модуль сейчас устроен так, что вам не нужно понимать особенности работы Rbac и для создания новой роли или разрешения, быть программистом. Идея модуля в том, чтобы менять доступы не меняя ничего в коде. Для правил нужно создавать отдельный класс и программно задавать условия выполнения правила в зависимости от структуры вашего приложения и потребностей. Мне кажется проще привязать такое правило один раз из кода в тех проектах где это нужно, чем вводить в заблуждение такой опцией всех остальных. Наличие модуля никак не меняет прямую работу с Yii::$app->authManager. Но я не буду закрывать вопрос и подумаю над тем, чтобы генерировать классы для правил автоматически, а в интерфейсе модуля сделать визуальный конструктор правил. Спасибо за идею.
Эльвира, большое спасибо за развёрнутый ответ! Думаю, в этом случае задача с автоматической генерацией классов правил и визуальным конструктором чересчур трудоёмка и вряд ли имеет смысл для вашей концепции. Я задал этот вопрос скорее из-за отсутствия какого-либо опыта работы с RBAC в Yii и исключительно в свете прочтения главы про правила из документации. Мне показалось, что это и есть "канонический" путь ограничения роли и только ему и стоит следовать. А вы не могли бы проиллюстрировать, как в концепции вашего модуля оптимально реализовать ограничение наподобие updateOwnPost? Допустим, я создал permission на post/update и привязал его к роли author. Как действовать дальше? Просто явным образом проверять условие, аналогичное условию правила, в actionUpdate? Ещё раз спасибо!
Модуль вам в этом случаи не поможет. Тут вы только можете дать доступ к post/update для какой-то роли или не дать его. Более тонкую логику в любом случаи нужно реализовывать в коде. Так что да:
- либо делать правило и привязывать его в коде (не через интерфейс модуля) и проверять через can()
- либо прописывать бизнес-правило в AccessControl контроллера (через denyCallback)
- либо делать if-проверку в начале нужного action или в методе beforeAction
Добрый день, у Вас обнаружены логические ошибки в отправках запроса:
файл: 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. Спасибо огромное, буду поддерживать Вас в разработки.