Я делаю небольшое приложение для обработки информации, связанной с проектом, и у меня проблемы с ACL. Как мне лучше всего справиться со следующей ситуацией?
Мое приложение имеет следующие таблицы:
users : Сохраняет информацию о пользователях (имя пользователя, пароль, адрес электронной почты, группа и т. Д.)
groups : Группы, к которым принадлежат пользователи. У меня есть «администраторы», «менеджеры» и «зарегистрированные»
роли : роли для зарегистрированных пользователей. У меня есть «лидер», «участник» и «гость».
членство : в этой таблице хранятся отношения между пользователями, ролями и проектами.
projects : Хранит информацию о проектах
пунктов : Проекты имеют несколько информационных элементов. В этой таблице хранятся эти предметы.
Таблицы имеют следующие отношения:
пользователи : имеет много участников, принадлежит к группам.
группы : hasMany пользователей
ролей : имеет много участников
членство : принадлежит пользователям, проектам, ролям
проектов : имеет много участников, предметы
предметов : принадлежит проектам
Обычно менеджеры (или администраторы) могут назначать роли зарегистрированным пользователям. Лидеры и участники могут принадлежать к нескольким проектам. Те, кто принадлежит конкретному проекту, могут редактировать данные этого проекта и связанные с ним элементы. Лидеры могут назначать участников проекта из пула зарегистрированных пользователей.
Вот ситуация с точки зрения CRUD:
Администраторы : Полный CRUD для всего (пользователей, участников, проектов, предметов)
Менеджеры : Могут пользователи CRUD типа «зарегистрированные», но не «менеджеры» или «администраторы». Полный CRUD на членство, проекты и предметы.
зарегистрирован : может делать разные вещи в зависимости от их роли:
лидеров (роль) : может обновлять свою собственную информацию пользователя и читать другие пользовательские данные, которые принадлежат их проектам (информация, хранящаяся в таблице «членство»). Можно CRUD членство для своих проектов. Можно CRUD предметы для собственных проектов. Можно обновлять собственные проекты.
участников (роль) : Может обновлять свою собственную информацию о пользователе и читать другие пользовательские данные, которые принадлежат их проектам. Можно CRUD предметы для собственных проектов. Можно читать членство для своих проектов. Можно обновлять собственные проекты.
гости (роль) : могут обновлять свою собственную информацию о пользователе. Умею читать проекты.
Исходя из вышеизложенной ситуации, что, по вашему мнению, будет лучшим подходом для ее решения? Я пытался с ACL, но где-то на пути я потерял. Я попытался поиграть с некоторыми из доступных плагинов ACL, но безуспешно. Самая большая проблема - иметь дело с созданием разрешений менеджерами и администраторами. Пожалуйста, помогите!
Я еще не адепт-пекарь, так что будьте добры. Ваши предложения и рекомендации будут с благодарностью. Спасибо!