Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Как Spatie справляется с иерархией ролей и наследством


Как Spatie справляется с иерархией ролей и наследством


Пакет разрешений Spatie's Laravel не поддерживает иерархию роли или наследство из коробки. Это означает, что он не имеет встроенной функциональности для определения отношений между родителями и детьми между ролями, где родительская роль автоматически наследует все разрешения его дочерних ролей.

Как Spatie обрабатывает роли и разрешения

- Роли и разрешения хранятся в качестве отдельных объектов в базе данных.
- Разрешения назначаются непосредственно на роли.
- Пользователям назначают роли, и благодаря этим ролям они получают связанные разрешения.
- Вы также можете назначить разрешения непосредственно пользователям.
- При проверке разрешений в пакете рассматриваются все разрешения, назначенные непосредственно пользователю, плюс те, которые унаследованы с помощью ролей.

Ролевая иерархия и наследство

- Пакет рассматривает роли как плоские сущности без какой -либо иерархии.
- Нет встроенного механизма, чтобы назначить одну роль другой или иметь «родительскую роль», которая автоматически наследует все разрешения «дочерних ролей» [1] [4].
- Пользователи могут иметь назначенные несколько ролей, что обеспечивает гибкость в сочетании разрешений из разных ролей, а не полагаться на иерархическое наследование [2].

Общие подходы к реализации ролевой иерархии с Spatie

Поскольку Spatie не поддерживает наследование роли, разработчики часто внедряют обходные пути, такие как:

-Присвоение всех разрешений явно на роли более высокого уровня: вместо наследуя разрешения от ролей дочерних ролей, вы вручную назначают все соответствующие разрешения для каждой роли, включая роли более высокого уровня, такие как «супер-админи», имеющие все разрешения на более низкие роли [2] [5].

- Ранжирующие роли с целочисленными значениями: Некоторые разработчики присваивают ранжирование или уровень ролям (например, 1 для пользователя, 2 для модератора, 3 для администратора), а затем реализуйте логику в своем приложении для предоставления разрешений на основе ранжирования роли пользователя, эффективного моделирования иерархии [2].

- Несколько ролей на пользователя: назначьте несколько ролей пользователям, которым нужны комбинированные разрешения из разных ролей, избегая необходимости в иерархических ролях [2].

Краткое содержание

- Пакет Spatie фокусируется на управлении ролями и разрешениями в качестве отдельных, плоских сущностей.
-Он поощряет назначение разрешений непосредственно ролям и пользователям без ролевого наследства.
- Ролевая иерархия и наследство должны быть реализованы вручную, если это необходимо, обычно путем явного назначения разрешений или с использованием пользовательской логики ранжирования.
- Этот дизайн позволяет избежать потенциальных проблем, когда разрешения роли родителей зависят от ролей детей, что может вызвать сложность безопасности или управления [1] [2] [4].

Таким образом, в то время как Spatie обеспечивает надежную и гибкую систему разрешений, она не обрабатывает ролевой иерархии и наследства внутри; Разработчики должны разработать свои собственные стратегии для имитации такого поведения, если это необходимо.

Цитаты:
[1] https://github.com/spatie/laravel-permission/issues/685
[2] https://www.reddit.com/r/laravel/comments/jrhkc9/trouggling_to_create_hierarchy_of_permissions_in/
[3] https://spatie.be/docs/laravel-permission/v6/introduction
[4] https://stackoverflow.com/questions/67520321/how-to-implement-hierarchical-rbac-in-laravel
[5] https://www.interserver.net/tips/kb/how-to-implement-role на основе access-control-in-laravel/
[6] https://www.reddit.com/r/laravel/comments/1e78vct/strategy_formission_and_authorisation_design/
[7] https://www.youtube.com/watch?v=3HSBJCVWH78
[8] https://spatie.be/docs/laravel-permission/v6/basic-usage/role-permissions
[9] https://stackoverflow.com/questions/78213905/hierarchical-roles-for-auser-with-child-roles-different-permissions-on
[10] https://stackoverflow.com/questions/75772209/spatie-role-plugin-for-laravel-seed-users-with-roles-dosnt-assignrole
[11] https://dev.to/varzoeaa/spatie-permissions--s-laravel-policies-and-gates-danling-role-access-1bdn