扣丁学堂PHP培训简述Laravel用户授权系统的使用方法

2019-09-23 10:08:03 3519浏览

关于Laravel用户授权系统不知道小伙伴们了解多少?不了解Laravel用户授权系统的小伙伴也没有关系,本篇文章扣丁学堂PHP培训小编给大家简单分享一下关于Laravel用户授权系统使用的相关资料,文中通过代码和示例给大家做了详细的介绍,对大家的学习或者工作具有一定的参考学习价值,感兴趣的小伙伴就来了解一下吧。


扣丁学堂PHP培训简述Laravel用户授权系统的使用方法


了解Laravel用户授权系统使用的相关内容之前,首先两个概念分清楚:


用户身份认证Authentication-处理用户登录, 退出, 注册, 找回密码, 重置密码, 用户邮箱认证etc..


权限管理Authorization-负责 用户 与 权限, 用户组 三者之间的对应, 以及管理。


下面来一起看看详细的介绍吧:


基本用法


示例


$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 方法中定义。


Gate::define('update-post', function ($user, $post) {
 return $user->id == $post->user_id;
});


第一个参数是权限的名称,第二个参数是满足权限的条件,可以是闭包,控制器方法。


授权动作


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 参数。


想要了解更多关于PHP开发方面内容的小伙伴,请关注扣丁学堂PHP培训官网、微信等平台,扣丁学堂IT职业在线学习教育有专业的PHP讲师为您指导,此外扣丁学堂老师精心推出的PHP视频教程定能让你快速掌握PHP从入门到精通开发实战技能。扣丁学堂PHP技术交流群:374332265。


                          JavaEE/微服务/源码解析/分布式/企业级架构【VIP体验课】


     【关注微信公众号获取更多学习资料】        【扫码进入JavaEE/微服务VIP免费公开课】  



查看更多关于“php培训资讯”的相关文章>>

标签: PHP培训 PHP视频教程 PHP在线视频 PHP学习视频 Laravel框架

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号