SpatieのLaravel Permission Packageは、箱から出して役割の階層や継承をネイティブにサポートしていません。これは、親の役割が子どもの役割のすべての許可を自動的に継承する役割間の親子関係を定義するための組み込み機能がないことを意味します。
Spatieが役割と権限をどのように処理するか
- 役割と権限は、データベース内の別々のエンティティとして保存されます。
- 権限は役割に直接割り当てられます。
- ユーザーには役割が割り当てられ、それらの役割を通じて、関連する権限が得られます。
- ユーザーに直接アクセス許可を割り当てることもできます。
- 許可を確認するとき、パッケージはユーザーに直接割り当てられたすべての権限と役割を介して継承された権限を調べます。
###役割の階層と継承
- パッケージは、役割を階層のないフラットエンティティとして扱います。
- ある役割を別の役割に割り当てる、または「子の役割」のすべての許可を自動的に継承する「親の役割」を持つための組み込みメカニズムはありません[1] [4]。
- ユーザーは複数の役割を割り当てることができます。これにより、階層的継承に依存するのではなく、さまざまな役割からのアクセス許可を組み合わせることができます[2]。
Spatieで役割階層を実装するための一般的なアプローチ
Spatieは役割の継承をサポートしていないため、開発者はしばしば次のような回避策を実装します。
- すべての権限を高レベルの役割に明示的に割り当てる:子どもの役割から許可を継承する代わりに、すべての関連する権限を各役割に手動で割り当てます。
- 整数値を持つランキングロール:一部の開発者は、ランクまたはレベルを役割に割り当て(例:ユーザーの場合は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ベースのアクセス - contol-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-with-hild-rols-having-different-permissions-on
[10] https://stackoverflow.com/questions/75772209/spatie-role-plugin-for-laravel-seed-users-with-roles-doesnt-assignrole
[11] https://dev.to/varzoeaa/spatie-permissions-vs-laravel-policies and-gates処理ロールベース-Access-1bdn