Laravel用户授权系统的使用方法示例


Posted in PHP onSeptember 16, 2018

前言

本文主要给大家介绍的是关于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 参数。

官方文档

Laravel 5.5 文档

https://laravel-china.org/docs/laravel/5.5/authorization/1310

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

PHP 相关文章推荐
用函数读出数据表内容放入二维数组
Oct 09 PHP
PHP小技巧搜集,每个PHPer都来露一手
Jan 02 PHP
在PHP中使用curl_init函数的说明
Nov 02 PHP
php5 apache 2.2 webservice 创建与配置(java)
Jan 27 PHP
php将时间差转换为字符串提示
Sep 07 PHP
php+xml结合Ajax实现点赞功能完整实例
Jan 30 PHP
PHP中trim()函数简单使用指南
Apr 16 PHP
基于PHP实现的事件机制实例分析
Jun 18 PHP
JSON字符串传到后台PHP处理问题的解决方法
Jun 05 PHP
Yii视图CGridView列表用法实例分析
Jul 12 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
Jun 03 PHP
php多进程并发编程防止出现僵尸进程的方法分析
Feb 28 PHP
Laravel中错误与异常处理的用法示例
Sep 16 #PHP
laravel获取不到session的三种解决办法【推荐】
Sep 16 #PHP
win7 wamp 64位 php环境开启curl服务遇到的问题及解决方法
Sep 16 #PHP
thinkphp5引入公共部分header、footer的方法详解
Sep 14 #PHP
PHP中创建和编辑Excel表格的方法
Sep 13 #PHP
PHP通过get方法获得form表单数据方法总结
Sep 12 #PHP
php获取手机端的号码以及ip地址实例代码
Sep 12 #PHP
You might like
php实现发送微信模板消息的方法
2015/03/07 PHP
jquery.AutoComplete.js中文修正版(支持firefox)
2010/04/09 Javascript
汉化英文版的Dreamweaver CS5并自动提示jquery
2010/11/25 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
javaScript让文本框内的最后一个文字的后面获得焦点实现代码
2013/01/06 Javascript
setInterval,setTimeout与jquery混用的问题
2013/04/08 Javascript
js保留两位小数使用toFixed实现
2013/07/29 Javascript
jQuery Form 页面表单提交的小例子
2013/11/15 Javascript
js字符串截取函数substr substring slice使用对比
2013/11/27 Javascript
Javascript中call的两种用法实例
2013/12/13 Javascript
在Html中使用Requirejs进行模块化开发实例详解
2016/04/15 Javascript
jquery实现网页定位导航
2016/08/23 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
bootstrap table操作技巧分享
2017/02/15 Javascript
vue loadmore 组件滑动加载更多源码解析
2017/07/19 Javascript
微信小程序异步处理详解
2017/11/10 Javascript
详解js模板引擎art template数组渲染的方法
2018/10/09 Javascript
微信小程序学习笔记之目录结构、基本配置图文详解
2019/03/28 Javascript
详解Vue路由自动注入实践
2019/04/17 Javascript
详解将微信小程序接口Promise化并使用async函数
2019/08/05 Javascript
vue keep-alive列表页缓存 详情页返回上一页不刷新,定位到之前位置
2019/11/26 Javascript
Python中functools模块函数解析
2017/03/12 Python
Html5在手机端调用相机的方法实现
2020/05/13 HTML / CSS
印度电子产品购物网站:Vijay Sales
2021/02/16 全球购物
The North Face官方旗舰店:美国著名户外品牌
2020/09/28 全球购物
新闻记者个人求职的自我评价
2013/11/28 职场文书
理工科学生的自我评价
2013/12/15 职场文书
安全检查与奖惩制度
2014/01/23 职场文书
2014年母亲节演讲稿范文
2014/05/07 职场文书
反腐倡廉演讲稿
2014/05/22 职场文书
小学领导班子对照材料
2014/08/23 职场文书
水利专业大学生职业生涯规划书范文
2014/09/17 职场文书
大学生创业事迹材料
2014/12/30 职场文书
2015年市场部工作总结
2015/04/30 职场文书
行政复议决定书
2015/06/24 职场文书
【DOTA2】当街暴打?PSG LGD vs VG - DPC 2022 WINTER TOUR CN
2022/04/02 DOTA