Home Arrow Icon Knowledge base Arrow Icon Global Arrow Icon haspermissionto和hasanypermission之间有什么区别


haspermissionto和hasanypermission之间有什么区别


在Spatie Laravel许可方面的背景下,``haspermissionto''和'Hasanypermission'之间的区别在于他们如何查看用户权限:

- Haspermission可以检查用户是否具有特定的单一许可。如果用户具有该确切的权限,则返回`true```true`'',否则直接分配或通过角色继承了``false`''。您可以将权限名称,ID或权限对象传递给此方法。当您想验证用户特定权限时,这很有用。

- hasanypermission可以检查用户是否具有 *作为数组或列表传递的多个权限之一。如果用户至少具有指定的权限之一,则返回`true`'',如果未分配这些权限,则``false''。如果要允许用户至少有一组可能的权限许可,则该方法很方便。

其他重要说明:

- 两种方法都将直接分配给用户分配的权限以及从角色继承的权限。

- 这些方法不考虑Laravel的GATE“回调或超级ADMIN旁路功能。为此,您应该使用Laravel的``can'','canany'或`canall'方法,而不是与大门和政策集成并支持超级公给逻辑。

- `haspermissionto'用于一次许可检查,而``hasanypermissionto''用于检查任何人都足够的多个权限。

总而言之,在验证一个权限时使用`haspermissionto',并在要检查用户是否至少有一个列表中的许可时使用`hasanypermissionto'。对于超级或更复杂的授权方案,更喜欢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-gate-and-haspermissionto-are-not-working
[3] https://github.com/spatie/laravel-permission/issues/79
[4] https://discuss.flarum.org/d/4817-difference-between-can-can-and-user-haspermission
[5] https://spatie.be/docs/laravel-permission/v6/basic-usage/role-permissions
[6] https://dev.to/nicolasmontielf/add-permissions-and-to-to-your-to-your-laravel-project-2hl
[7] https://www.reddit.com/r/laravel/comments/1e78vct/strategy_for_permission_and_authorisation_design/
[8] https://www.honeybadger.io/blog/laravel-permissions-roles/