Задать вопрос
@Artem0071
Безработный mr. Junior

Как Вы задаете правила для пользователей?

Несколько раз посмотрел эту статью, и эту

Так же просмотрел, как для примера, апи ВК с настройкой прав доступа.
Как по мне идея с разделением прав на биты очень интересна.

Но тут не одно НО.

В примерах из статьи на хабре указан слишком простой пример, и для своего проекта он не подходит (как мне кажется).

Допустим у нас есть несколько разделов (посты, аудио, видео, изображения, личный кабинет, рекламный кабинет, админка, администратор, и еще штук 5 допустим)
От постов до изображений мы можем:
  • смотреть
  • комментарии
    • смотреть
    • добавлять
    • удалять
    • редактировать
    • редактировать_глобально (а-ля для админов и редакторов с модераторами)

  • добавлять
  • удалять
  • редактировать
  • редактировать_глобально


А в личном кабинете и остальных блоках будет еще куча действий (например: вкл/выкл для своих комментов, лимиты на добавление записей и тд)

Это уже получается 10 полей * на 4 раздела (посты, картинки, ...) = 40 полей

А уж остальные точно будут еще больше и получится что для одной группы пользователей будет порядка 100 полей
Это конечно можно сделать, но оптимизация тут будет крайне плохой

Единственное думал на счет битов, например блок с комментариями можно разбить так:
0 - ничего нельзя
1 - можно смотреть
2 - можно добавлять
4 - можно редактировать
8 - можно удалять
16 - можно редактировать глобально
32 - можно удалять глобально

и тогда вместо 6 столбцов для комментариев использовать 1
Например если это админ, то у него будет доступ 64(111111), а для обычного пользователя 15(1111)

В общем, я те статьи прочитал раз по 10, если не больше. Пробовал делать такие таблицы, которые указал выше, но они уж очень огромные выходили

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

Буду рад любым предложениям, либо ссылкам на статьи
  • Вопрос задан
  • 320 просмотров
Подписаться 2 Оценить Комментировать
Пригласить эксперта
Ответы на вопрос 2
Stalker_RED
@Stalker_RED
До битовых масок вы сами додумались, уже неплохо.

Можно привязывать доступы к ролям. К примеру роли guest, owner, admin, superadmin, whatever.
И каждый пользователь имеет одну или несколько ролей. Guest - только смотреть, owner - смотреть, редактировать, удалаять, добавлять, переключать комменты и т.д., admin - смотреть, банить юзеров и удалять, например (вам виднее какие именно возможности у админа).

Или можно завести отдельную таблицу с ролями и таблицу связей многие-ко-многим, чтобы привязывать роли к юзерам.
lCXIx.png
Ответ написан
Комментировать
@xfg
Раньше RBAC был. Модуль искал в файлах с контроллерами все экшены и отображал в виде списка. Чекбоксами отмечали для каких экшенов сгенерировать права. Дальше права назначались на роль. Роли на пользователей. В коде прежде чем запустить любой экшен был хук, который проверял есть ли у роли право с названием "модуль:контроллер:экшен". Есть - выполняем. Нет - 403 Forbidden.

Была куча проблем. И вообще позже заметили, что назначаем права один раз и больше никто ничего не меняет. Потому что все эти права это бизнес-логика нашего приложения. Мы же не cms делаем и не нужно пытаться выносить эти правила из кода в веб-интерфейс. Меняются бизнес-правила - меняется код. Теперь всё проще. Мы пишем мидлвары например аутентифицирован/заблокирован и т.д. Мидлвары просто вешаются на нужный экшен и передают управление друг другу по цепочке до самого экшена и каждый из мидлваров может зарубить запрос. Это оказалось гибче, проще и удобнее, чем тыкать сотни чекбоксов в веб интерфейсе ведь в мидлваре можно написать абсолютно любой код. Потому что не бывает так, что вам надо сегодня заблокированным запретить комментировать фото, завтра разрешить, а послезавтра снова запретить. Даже если надо, то мы напишем соответствующий мидлвар, повесим на экшен и выкатим в продакшен, а не будем тыкать каждый день чекбоксы в малопонятном веб-интерфейсе прав доступа. Тем более заказчик всё равно не понимал, что это за чушь NewsModule:NewsController:addAction сколько бы ему не объясняли, что это название разрешения на добавление новостей, а нотация указывает для какого модуля, контроллера и экшена, а названия разрешений такие убогие, потому что генерируются автоматически из исходного кода. У него взрывалась голова и он говорил, ладно ребята, надо будет поменять, я вам наберу :)
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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