В приложении Laravel у меня есть users
, roles
и permissions
.Роли прикреплены к пользователям, а разрешения - к ролям.
Пользователи:
id | name | email
______________________
1 | saba | saba@gmail.com
2 | nika | nika@gmail.com
3 | gio | gio@gmail.com
Роли:
id | name
______________________
1 | Admin
2 | Client
3 | Service_provider
Разрешения:
id | name
______________________
1 | add_admin
2 | delete_admin
3 | approve_order
4 | delete_order
User_roles:
id | user_id | role_id
______________________
1 | 1 | 1
2 | 2 | 2
Role_permissions:
id | role_id | permission_id
____________________________
1 | 1 | 1
2 | 1 | 2
3 | 1 | 3
В этом примере user
с id
1 , это Admin
и он может add_admin
, delete_admin
, approve_order
Но мне нужно другоеАдминистраторы имеют разные разрешения.В этой структуре, если я прикреплю admin
роль к user
с id
2 , его разрешения будут такими же, как у user
с id
1 .
Мне нужны разные администраторы с разными разрешениями, разные клиенты с разными разрешениями.
Есть небольшой сценарий:
Представьте, что есть два пользователя A и B , они хотят зарегистрироваться в качестве клиентов, поэтому, когда они зарегистрируются, я прикреплю к ним роли Клиентов.Они имеют те же разрешения, но если пользователь A будет загружать свои документы, мне нужно приложить новое разрешение для пользователя A , но не для пользователя B .
Мое решение состоит в том, чтобы создать новую таблицу, к которой я прикрепляю права пользователей
User_permissions:
Id | user_id | permission_id
____________________________
1 | 1 | 4
Таким образом, все права пользователя будут егоразрешения для роли + разрешения из таблицы, которую я описал выше
Мне нужно, чтобы вы, ребята, помогли мне решить, является это решение хорошим или плохим, или есть какой-то другой способ лучше этого?(что является лучшей практикой для такого рода проблем?)