Balíček Spatie's Laravel Permission balíček nepodporuje hierarchii rolí ani dědictví z krabice. To znamená, že nemá vestavěnou funkčnost pro definování vztahů mezi rodiči a dítětem mezi rolemi, kde rodičovská role automaticky zdědí všechna oprávnění svých dětských rolí.
Jak Spatie zpracovává role a oprávnění
- Role a oprávnění jsou v databázi uloženy jako samostatné entity.
- Oprávnění jsou přiřazena přímo k rolím.
- Uživatelé jsou přiřazeni role a prostřednictvím těchto rolí získávají související oprávnění.
- Můžete také přiřadit oprávnění přímo uživatelům.
- Při kontrole oprávnění se balíček dívá na všechna oprávnění přiřazená přímo uživateli plus povolení zděděná prostřednictvím rolí.
Hierarchie a dědictví rolí
- Balíček považuje role za ploché entity bez jakékoli hierarchie.
- Neexistuje žádný vestavěný mechanismus, který by přiřadil jednu roli druhé nebo mít „rodičovskou roli“, která automaticky zdědí všechna oprávnění „dětských rolí“ [1] [4].
- Uživatelé mohou mít přiřazené více rolí, což umožňuje flexibilitu při kombinaci oprávnění z různých rolí, než se spoléhat na hierarchickou dědičnost [2].
Společné přístupy k implementaci hierarchie rolí s Spatie
Protože Spatie nepodporuje dědictví rolí, vývojáři často implementují řešení, jako jsou:
-Přiřazení všech oprávnění výslovně k rolím vyšší úrovně: Místo zdědění oprávnění z dětských rolí ručně přiřadíte všechna relevantní oprávnění každé roli, včetně rolí vyšší úrovně, jako je „super-admin“, která mají veškerá oprávnění nižších rolí [2] [5].
- Hodnocení rolí s celočíselnými hodnotami: Někteří vývojáři přiřazují roli nebo úroveň roli (např. 1 pro uživatele, 2 pro moderátora, 3 pro správce) a poté ve své aplikaci implementují logiku na základě pořadí role uživatele, efektivně simulují hierarchii [2].
- Více rolí na uživatele: Přiřaďte více rolí uživatelům, kteří potřebují kombinovaná oprávnění z různých rolí, a zabrání potřebě hierarchických rolí [2].
Shrnutí
- Balíček Spatie se zaměřuje na správu rolí a oprávnění jako samostatné ploché entity.
-Podporuje přiřazení oprávnění přímo rolím a uživatelům bez dědictví role.
- Hierarchie rolí a dědičnost musí být v případě potřeby implementována ručně, obvykle přiřazením oprávnění výslovně nebo pomocí logiky vlastního hodnocení.
- Tento návrh se vyhýbá potenciálním problémům, ve kterých oprávnění mateřské role závisí na dětských rolích, což by mohlo způsobit bezpečnost nebo složitost řízení [1] [2] [4].
Přestože Spatie poskytuje robustní a flexibilní systém oprávnění, nezvládne interně hierarchii rolí a dědictví; Vývojáři musí v případě potřeby navrhnout své vlastní strategie, aby si simulovali takové chování.
Citace:
[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-Access-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-aser-with-Child-Roles-Different-Permissions-on
[10] https://stackoverflow.com/questions/75772209/spatie-role-plugin-for-laravel-seed-users-with-tolesnt-assignrole
[11] https://dev.to/varzoeaa/spatie-permissions-vs-laravel-policies and-branding-role-access-1bdn