@bagos

RBAC в yii, Как организовать управление правами для конкретной модели?

Добрый день!
В большинстве случаев достаточно простого управления ролями и разрешениями на доступ к action контроллера.
А тут встала задача устанавливать права на конкретные записи сущностей. Например возьмём сущность post (упростим до id, name). Требуется установить для определенной роли допустим 3 разрешения:
1. сreate - создание поста
2. update - редактирование поста
3. delete - удаление поста

Если для 1. Create создаем permission - module.controller.create и вешаем на роль, то для update и delete требуется выставить конкретный посты, которые роль позволит редактировать или удалять.

Для себя определил пару вариантов для решения задачи, кто сталкивался с подобной задачей прошу поделиться идеей вашей реализации или прокомментировать мои варианты.

1) На каждый пост создавать свои permission (update, delete), например module.posts.update.3, module.posts.update.121, module.posts.delete.92 . К плюсам отношу простоту создания разрешения, навешивания на роль, и дальнейшая проверка пользователем на наличие разрешения. К минусам: огромное кол-во разрешений для каждой записи, хотя возможно это нормально и минусом не является, но почему то в таблице ролей и разрешений хочется видеть небольшое кол-во записей.

2) Создать два разрешения module.posts.update и module.posts.delete, при установке прав навешивать на роль, а в поле Data разрешения хранить массив ролей с доступными id постов.
Вида data: [firstRole: [1, 4, 191 ] ]
Ну и добавить правило к разрешению, по которому будет происходить проверка. К плюсам, отсутсвует порнуха в таблице authitem от кол-ва разрешений и их наименованиях. К минусам ощущение "масла масленного" в логике, к роли добавляем разрешение, еще и прописываем в Data массив разрешенных данных для этой же роли. Плюс для каждой новой роли либо придется сразу добавлять разрешение, либо при установки разрешения на пост, проверять что в поле дата, и если там роли нет то добавлять туда новую запись.
3) Создать сущность, которая будет содержать информацию о ролях, разрешениях, и доступных записях, но мне кажется это лишнее и вопрос решается более грамотно путем использования имеющейся логики rbac.

Заранее спасибо
  • Вопрос задан
  • 67 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы