Balík povolení spoločnosti Spatie's Laravel nepodporuje natívne hierarchiu rolí alebo dedičstvo mimo krabice. To znamená, že nemá zabudovanú funkciu na definovanie vzťahov medzi rodičmi a deťmi medzi úlohami, kde rodičovská rola automaticky zdedí všetky povolenia svojich detských rolí.
Ako Spatie zvláda úlohy a povolenia
- Úlohy a oprávnenia sa ukladajú ako samostatné entity v databáze.
- Povolenia sú priradené priamo k úlohám.
- Používateľom sú pridelené úlohy a prostredníctvom týchto úloh získavajú pridružené povolenia.
- Môžete tiež priradiť povolenia priamo používateľom.
- Pri kontrole povolení sa balík zameriava na všetky povolenia priradené priamo používateľovi plus osôb zdedený prostredníctvom rolí.
Hierarchia rolí a dedičstvo
- Balík zaobchádza s úlohami ako s plochými entitami bez akejkoľvek hierarchie.
- Neexistuje vstavaný mechanizmus na priradenie jednej úlohy inej alebo mať „rodičovskú rolu“, ktorá automaticky zdedí všetky povolenia „detských rolí“ [1] [4].
- Používatelia môžu mať pridelených viac úloh, čo umožňuje skôr flexibilitu pri kombinácii povolení z rôznych úloh, než aby sa spoliehali na hierarchické dedičstvo [2].
Bežné prístupy k implementácii hierarchie rolí s Spatie
Keďže Spatie nepodporuje dedičstvo úlohy, vývojári často implementujú riešenia, ako napríklad:
-Priradenie všetkých povolení výslovne k úlohám na vyššej úrovni: Namiesto zdedenia povolení z detských rolí ručne priraďujete každej úlohe všetky relevantné povolenia, vrátane úloh vyššej úrovne, ako je „super-admin“, ktoré majú všetky povolenia nižších rol [5].
- Úlohy hodnotenia s celočíselnými hodnotami: Niektorí vývojári priraďujú k úlohám alebo úrovne úlohy (napr. 1 pre používateľa, 2 pre moderátora, 3 pre správcu) a potom implementujú logiku vo svojej aplikácii na udelenie povolení na základe poradia rolí používateľa, ktorá efektívne simuluje hierarchiu [2].
- Viaceré úlohy na používateľa: Priraďte viac úloh používateľom, ktorí potrebujú kombinované povolenia z rôznych úloh, čím sa vyhýbajú potrebe hierarchických úloh [2].
Zhrnutie
- Balík Spatie sa zameriava na riadenie úloh a povolení ako na samostatné ploché subjekty.
-Podporuje priradenie povolení priamo k úlohám a používateľom bez dedičstva roly.
- Hierarchia rolí a dedičstvo sa musia v prípade potreby implementovať ručne, zvyčajne sa priradením povolení explicitne prideľuje oprávnenia alebo pomocou logiky hodnotenia vlastnej hodnotenia.
- Tento návrh sa vyhýba potenciálnym problémom, keď povolenia rodičovskej úlohy závisia od detských úloh, ktoré by mohli spôsobiť bezpečnosť alebo zložitosť riadenia [1] [4].
Zatiaľ čo Spatie poskytuje robustný a flexibilný systém povolení, interne nezvládne hierarchiu rolí a dedičstvo; Vývojári musia navrhnúť svoje vlastné stratégie na simuláciu takéhoto správania, ak je to potrebné.
Citácie:
[1] https://github.com/spatie/laravel-permission/issues/685
[2] https://www.reddit.com/r/laravel/comments/jrhkc9/struggling_to_create_hierachy_of_permissions_in/
[3] https://spatie.be/docs/laravel-permission/v6/introdukcia
[4] https://stackoverflow.com/questions/67520321/how-to-implement-hierarchical-rbac-in-in-laravel
[5] https://www.interserver.net/tips/kb/how-to-implement-le-sent-access-control-in-inlaravel/
[6] https://www.reddit.com/r/laravel/comments/1e78vct/strategy_for_permission_and_authorization_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-olles-for-a-user-with-child-olles-having-different-permissions-on
[10] https://stackoverflow.com/questions/75772209/sppatie-role-plugin-for-laravel-seed-users-with-olles-doesnt-assignrole
[11] https://dev.to/varzoeaa/spatie-permissions-vs-laravel-policiies-and-gates-handling-role založené na-ccess-1bdn