В настоящее время я работаю над проектом Laravel, который несколько мультитенантен.
Администратор будет создавать компании, которые по сути являются арендаторами, но пользователь может входить в состав нескольких компаний, каждая из которых имеет роль или назначенные индивидуальные разрешения.
Чтобы сделать вещи более сложными, пользователь также может быть назначен на проект с ролью, которая предоставит ему доступ к этому проекту, даже если он не является частью этого проекта.
Пользователь сможет видеть все свои данные, к которым он привязан, на одном портале, поэтому нет переключающихся арендаторов.
Так что разрешения становятся ужасно запутанными со всеми отношениями.
Ниже приведены таблицы, которые, как я предполагаю, необходимы для установки таких отношений:
Пользователь:
user_role (используется для назначения пользователей-администраторов):
Компания:
user_company:
- ID
- user_id
- company_id
- role_id
user_company_permission:
- ID
- user_company_id
- permission_id
разрешение:
Роль:
permission_role:
проект:
- Я бы
- (другая информация, связанная с проектом)
project_user:
- Я бы
- project_id
- Идентификатор пользователя
- role_id
Итак, есть ли простой способ управления всеми этими разрешениями?
Было бы неплохо, если бы при проверке разрешений по умолчанию проверялись все компании и проекты пользователя, но если они были переданы, это ограничивало бы эту компанию или проект.
Я просмотрел некоторые плагины разрешений, но не могу найти ничего, что могло бы легко удовлетворить мою проблему.