Spatie Laravel Permissionパッケージのコンテキストでの「HasPermission」と「HasanyPermission」の違いは、ユーザーの許可を確認する方法にあります。
-haspermissiontoユーザーが特定の単一の許可を持っているかどうかを確認します。ユーザーがその正確な許可を持っている場合、「true」を返します。このメソッドに許可名、ID、または許可オブジェクトを渡すことができます。ユーザーの特定の許可を1つ確認する場合に役立ちます。
- ユーザーが配列またはリストとして渡された複数のアクセス許可のいずれかを *任意の *持っているかどうかをチェックするためにhasanypermission。ユーザーが指定された権限の少なくとも1つを持っている場合は、「true」を返し、それらのいずれも割り当てられていない場合は「false」です。この方法は、ユーザーが可能な許可のセットから少なくとも1つの許可を持っている場合にアクセスを許可する場合に便利です。
追加の重要なメモ:
-両方の方法は、ユーザーに直接割り当てられた権限と役割から継承された権限をチェックします。
- これらの方法では、LaravelのGate `前のコールバックまたはスーパーアドミンバイパス機能を考慮しません。そのためには、Laravelの「Can lo、「canny」、または `canall」メソッドを使用する必要があります。代わりに、ゲートやポリシーと統合し、スーパーアドミンロジックをサポートする必要があります。
- `haspermissionto`は単一の許可チェック用であり、「hasanypermission to」は、人が十分な場合に複数の権限をチェックするためです。
要約すると、1つの許可を確認するときに「haspermissionto」を使用し、ユーザーがリストから少なくとも1つの許可を持っているかどうかを確認するときに「hasanypermission」を使用します。スーパーアドミンまたはより複雑な承認シナリオの場合、Laravelの組み込み「Can」メソッドの代わりに[1] [2] [5]を好む。
引用:
[1] https://spatie.be/docs/laravel-permission/v6/basic-usage/direct-permissions
[2] https://stackoverflow.com/questions/58093970/spatie-laravel-permissions-gate-and-haspermission-are-not-working
[3] https://github.com/spatie/laravel-permission/issues/79
[4] https://discuss.flarum.org/d/4817-difference-betwene-user-can and-user-haspermission
[5] https://spatie.be/docs/laravel-permission/v6/basic-usage/role-permissions
[6] https://dev.to/nicolasmontielf/add-permissions-and-role-to-your-laravel-project-2hhl
[7] https://www.reddit.com/r//laravel/comments/1e78vct/strategy_for_permission_and_authorisation_design/
[8] https://www.honeybadger.io/blog/laravel-permissions roles/