Как лучше организовать регистрацию/авторизацию и 3 роли (Yii)?

Доброе время суток.

Нужно ли реализовывать RBAC, если мне нужны "гость", "авторизованный", "админ", или можно обойтись какой-то более простой архитектурой?

Я нахожу rbac сложным и до конца не понимаю деталей его реализации (читал habrahabr.ru/post/177873 и документацию yii). Просто я не понимаю, зачем 3 таблицы в базе для такой тривиальной задачи.

И еще (простите за второй вопрос), регистрация и авторизация должны работать через одну модель?
  • Вопрос задан
  • 3752 просмотра
Решения вопроса 2
metamorph
@metamorph
Эти роли легко реализуются при помощи обычного accessFilter, только не забудьте проконтролировать доступ пользователей к "чужому" контенту.

Можете сделать, к примеру, три части:
1. общая часть, для всех
2. модуль для пользователей (создание/редактирование контента)
3. модуль для админа (администрирование всего этого цирка)

Модуль для пользователей прикрыт фильтром accessControl с настройкой 'users' => array('@'), а при редактировании записи делайте проверку на owner_id. Для удобства можете вынести это в named scope, чтобы можно было делать что-нибудь вроде
$record = MyModel::model()->active()->ownedBy(Yii::app()->user->id)->findByPk($id); if (!$record) {кинуть 404}
или вообще $record = MyModel::model()->active()->own()->findByPk($id); (криво с точки зрения MVC, но удобно)

Модуль для админов прикрыт accessRules с настройкой 'expression' => '$user->isAdmin()',
Ответ написан
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Действительно, три таблицы для 3 групп пользователей не нужны. Во всяком случае для гостей таблицу - это глупо. Настройки прав могут храниться в конфиге, так что тут тоже проще... По сути я не вижу ничего

Мое мнение RBAC нужно реализовывать, ибо это более гибкий вариант. Да и зачем изобретать велосипед?
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
советую посмотреть yii2-app-advanced в официльном репозитории - там есть и регистрация и логин.
rbac реализовать через конфиг-файл, реализация простейшая.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы