Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon Як Spatie обробляє ієрархію ролі та успадкування


Як Spatie обробляє ієрархію ролі та успадкування


Пакет дозволу Laravel Spatie не підтримує ієрархію ролі або успадкування поза коробкою. Це означає, що він не має вбудованої функціональності для визначення відносин батько-дитина між ролями, де батьківська роль автоматично успадковує всі дозволи своїх дитячих ролей.

Як 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/struggling_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-acaccess-control-in-laravel/
[6] https://www.reddit.com/r/laravel/comments/1e78vct/strategy_for_permission_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-a-uth --child-roles-having-different-permission-on-on
[10] https://stackoverflow.com/questions/75772209/spatie-role-plugin-for-laravel-seed-users-with-roles-doesnt-assignrole
[.