Пакет дозволу 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
[.