Laravel用户授权系统的使用方法示例
Laravel  /  管理员 发布于 5年前   241
前言 本文主要给大家介绍的是关于Laravel用户授权系统使用的相关内容 首先两个概念分清楚: 用户身份认证 Authentication - 处理用户登录, 退出, 注册, 找回密码, 重置密码, 用户邮箱认证 etc.. 权限管理 Authorization - 负责 用户 与 权限, 用户组 三者之间的对应, 以及管理. 下面话不多说了,来一起看看详细的介绍吧 基本用法 示例 第一个参数 $ability,表示具备什么权限。第二个参数 $post,是一个模型实例。 不需指定模型的动作,比如 create,不需要指定的模型。第二个参数传一个类名。如: 使用的场景有:控制器辅助方法,中间件,Blade模板,User 模型的 can 和 can't 方法。 authorize方法: 有两种方式实现用户授权 Gates 编写 Gates 一般在 app\Providers\AuthServiceProvider 的 boot 方法中定义。 第一个参数是权限的名称,第二个参数是满足权限的条件,可以是闭包,控制器方法。 授权动作 allows 和 denies 两种方法,表示允许和否定。 第一个参数是权限的名称,第二个参数是模型,可以为空。这里不需要传入用户,框架会自动处理。 如果需要指定特定用户,可以使用 Gate Facade 中的 forUser 方法: 策略 生成策略 artisan 命令: 也可以指定 model,生成包含 CURD 的策略方法。 注册策略 在 AuthServiceProvider 的 policies 属性,可以将模型和策略对应起来。如: 策略方法 策略方法,就是权限名称, 当 authorize 方法调用的时候,实际上会自动注入 User 和 Post 类型的两个参数,也因此使用授权系统必须是用户登录的情况下。 使用策略也不一定要和模型绑定,比如这样也可以: 这个 aaa 字符串对应策略类为 此时也是可行的,第二个参数这个时候就必须是字符串 aaa 了,然后 authorize 方法只会自动注入 User 参数。 官方文档 Laravel 5.5 文档 https://laravel-china.org/docs/laravel/5.5/authorization/1310 总结 以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家的支持。$this->authorize('update', $post);
$this->authorize('create', Post::class);
public function authorize($ability, $arguments = []){ list($ability, $arguments) = $this->parseAbilityAndArguments($ability, $arguments); return app(Gate::class)->authorize($ability, $arguments);}
Gate::define('update-post', function ($user, $post) { return $user->id == $post->user_id;});
if (Gate::allows('update-post', $post)) { // 指定用户可以更新博客...} if (Gate::denies('update-post', $post)) { // 指定用户不能更新博客...}
if (Gate::forUser($user)->allows('update-post', $post)) { // 指定用户可以更新博客...} if (Gate::forUser($user)->denies('update-post', $post)) { // 指定用户不能更新博客...}
php artisan make:policy PostPolicy
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
这个策略。protected $policies = [ Travel::class => TravelPolicy::class, 'aaa'=>TravelPolicy::class,];
TravelPolicy::class
,在控制器使用 authorize 判断授权:$this->authorize('update','aaa');
您可能感兴趣的文章:
122 在
学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..123 在
Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..原梓番博客 在
在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..博主 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..1111 在
佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
Copyright·© 2019 侯体宗版权所有·
粤ICP备20027696号