内容简介:Laravel 5.5 文档示例
官方文档
Laravel 5.5 文档
https://laravel-china.org/docs/laravel/5.5/authorization/1310
基本用法
示例
$this->authorize('update', $post);
第一个参数 $ability,表示具备什么权限。第二个参数 $post,是一个模型实例。
不需指定模型的动作,比如 create,不需要指定的模型。第二个参数传一个类名。如:
$this->authorize('create', Post::class);
使用的场景有:控制器辅助方法,中间件,Blade模板,User 模型的 can 和 can’t 方法。
authorize方法:
public function authorize($ability, $arguments = [])
{
list($ability, $arguments) = $this->parseAbilityAndArguments($ability, $arguments);
return app(Gate::class)->authorize($ability, $arguments);
}
有两种方式实现用户授权
Gates
编写 Gates
一般在 app\Providers\AuthServiceProvider 的 boot 方法中定义。
发生错误,请稍后重试。
第一个参数是权限的名称,第二个参数是满足权限的条件,可以是闭包,控制器方法。
授权动作
allows 和 denies 两种方法,表示允许和否定。
第一个参数是权限的名称,第二个参数是模型,可以为空。这里不需要传入用户,框架会自动处理。
if (Gate::allows('update-post', $post)) {
// 指定用户可以更新博客...
}
if (Gate::denies('update-post', $post)) {
// 指定用户不能更新博客...
}
如果需要指定特定用户,可以使用 Gate Facade 中的 forUser 方法:
if (Gate::forUser($user)->allows('update-post', $post)) {
// 指定用户可以更新博客...
}
if (Gate::forUser($user)->denies('update-post', $post)) {
// 指定用户不能更新博客...
}
策略
生成策略
artisan 命令:
php artisan make:policy PostPolicy
也可以指定 model,生成包含 CURD 的策略方法。
注册策略
在 AuthServiceProvider 的 policies 属性,可以将模型和策略对应起来。如:
protected $policies = [ Post::class => PostPolicy::class, ];
策略方法
public function update(User $user, Post $post)
{
return $user->id === $post->user_id;
}
策略方法,就是权限名称,$this->authorize(‘update’, $post) 的第一个参数就对应同名的策略方法,第二个参数 $post 代表它是一个 Post 模型,框架会根据参数判断采用 Post::class => PostPolicy::class 这个策略。
当 authorize 方法调用的时候,实际上会自动注入 User 和 Post 类型的两个参数, 也因此使用授权系统必须是用户登录的情况下 。
使用策略也不一定要和模型绑定,比如这样也可以:
protected $policies = [ Travel::class => TravelPolicy::class, 'aaa'=>TravelPolicy::class, ];
这个 aaa 字符串对应策略类为 TravelPolicy::class,在控制器使用 authorize 判断授权:
$this->authorize('update','aaa');
此时也是可行的,第二个参数这个时候就必须是字符串 aaa 了,然后 authorize 方法只会自动注入 User 参数。
以上所述就是小编给大家介绍的《Laravel 用户授权系统使用小结》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!
猜你喜欢:本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Flask Web开发:基于Python的Web应用开发实战
[美] Miguel Grinberg / 安道 / 人民邮电出版社 / 2014-12 / 59.00元
本书不仅适合初级Web开发人员学习阅读,更是Python程序员用来学习高级Web开发技术的优秀参考书。 • 学习Flask应用的基本结构,编写示例应用; • 使用必备的组件,包括模板、数据库、Web表单和电子邮件支持; • 使用包和模块构建可伸缩的大型应用; • 实现用户认证、角色和个人资料; • 在博客网站中重用模板、分页显示列表以及使用富文本; • 使用基于......一起来看看 《Flask Web开发:基于Python的Web应用开发实战》 这本书的介绍吧!