Laravel 授权策略(Policy)的基本使用
Policy
(即策略)是在特定模型或者资源中组织授权逻辑的类,用来处理用户授权动作。
比如在博客程序中会有一个 Article
模型,这个模型就会有一个相应的 ArticlePolicy
来对用户的操作进行授权,比如在修改一篇文章时,我们会这样写:
1 | $article = Article::find(1) |
Policy
其实就是将校验的逻辑从控制器转移到相对应的模型策略 (ArticlePolicy
) 中。
生成 Policy
使用 php artisan make:policy ArticlePolicy
命令生成 Policy,保存在 app/Policies
目录下。
注册 Policy
然后在 app/Providers/AuthServiceProvider.php
的 policies
数组中注册该策略,将 Article
模型与对应的 ArticlePolicy
策略进行绑定。
1 | <?php |
编写 Policy 校验逻辑
接下来就在 ArticlePolicy
策略中编写校验用户是否拥有修改文章的权限的方法。
1 | <?php |
在 update
方法中判断文章作者id是否等于当前登录的用户id,返回 true 或 false。true 可以进行修改操作,false 则会抛出没有权限。
使用 Policy
然后就是在控制器中的使用了。
1 | <?php |
authorize
的第一个参数表示本次验证使用 ArticlePolicy
里面的 update
方法, $article
实例用来判断使用哪一种策略,当然也可以不用指定具体实例,只需要传递一个类名。
1 | $this->authorize('update', Article::class); |
原文作者: her-cat
原文链接: https://her-cat.com/2018/07/03/basic-usage-of-laravel-authorization-policy.html
许可协议: 知识共享署名-非商业性使用 4.0 国际许可协议