laravel框架创建授权策略实例分析


Posted in PHP onNovember 22, 2019

本文实例讲述了laravel框架创建授权策略。分享给大家供大家参考,具体如下:

用户只能编辑自己的资料

在完成对未登录用户的限制之后,接下来我们要限制的是已登录用户的操作,当 id 为 1 的用户去尝试更新 id 为 2 的用户信息时,我们应该返回一个 403 禁止访问的异常。在 Laravel 中可以使用 授权策略 (Policy) 来对用户的操作权限进行验证,在用户未经授权进行操作时将返回 403 禁止访问的异常。

1. 创建授权策略

我们可以使用以下命令来生成一个名为 UserPolicy 的授权策略类文件,用于管理用户模型的授权。

php artisan make:policy UserPolicy

所有生成的授权策略文件都会被放置在 app/Policies 文件夹下。

让我们为默认生成的用户授权策略添加 update 方法,用于用户更新时的权限验证。

app/Policies/UserPolicy.php

laravel框架创建授权策略实例分析

update 方法接收两个参数,第一个参数默认为当前登录用户实例,第二个参数则为要进行授权的用户实例。当两个 id 相同时,则代表两个用户是相同用户,用户通过授权,可以接着进行下一个操作。如果 id 不相同的话,将抛出 403 异常信息来拒绝访问。

使用授权策略需要注意以下两点:

  1. 我们并不需要检查 $currentUser 是不是 NULL。未登录用户,框架会自动为其 所有权限 返回 false
  2. 调用时,默认情况下,我们 不需要 传递当前登录用户至该方法内,因为框架会自动加载当前登录用户(接着看下去,后面有例子)。

2. 注册授权策略

Laravel 提供两种注册授权策略的方式,第一种是手动指定,第二种是 Laravel 5.8 新增功能 —— 自动授权注册。为了方便起见,我们会使用第二种。

自动授权默认会假设 Model 模型文件直接存放在 app 目录下,鉴于我们已将模型存放目录修改为 app/Models,接下来还需自定义自动授权注册的规则,修改 boot() 方法:

app/Providers/AuthServiceProvider.php

laravel框架创建授权策略实例分析

授权策略定义完成之后,我们便可以通过在用户控制器中使用 authorize 方法来验证用户授权策略。默认的 App\Http\Controllers\Controller 类包含了 Laravel 的 AuthorizesRequests trait。此 trait 提供了 authorize 方法,它可以被用于快速授权一个指定的行为,当无权限运行该行为时会抛出 HttpException。authorize 方法接收两个参数,第一个为授权策略的名称,第二个为进行授权验证的数据。

我们需要为 edit 和 update 方法加上这行:

laravel框架创建授权策略实例分析

这里 update 是指授权类里的 update 授权方法,$user 对应传参 update 授权方法的第二个参数。正如上面定义 update 授权方法时候提起的,调用时,默认情况下,我们 不需要 传递第一个参数,也就是当前登录用户至该方法内,因为框架会自动加载当前登录用户。

书写的位置如下:

app/Http/Controllers/UsersController.php

laravel框架创建授权策略实例分析

希望本文所述对大家基于Laravel框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php Ajax乱码
Apr 09 PHP
Wordpress php 分页代码
Oct 21 PHP
php递归实现无限分类的方法
Jul 28 PHP
PHP表单提交后引号前自动加反斜杠的原因及三种办法关闭php魔术引号
Sep 30 PHP
PHP文件上传操作实例详解
Sep 27 PHP
PHP对象、模式与实践之高级特性分析
Dec 08 PHP
解决php 处理 form 表单提交多个 name 属性值相同的 input 标签问题
May 11 PHP
PHP封装的XML简单操作类完整实例
Nov 13 PHP
浅谈PHP中pack、unpack的详细用法
Mar 12 PHP
thinkPHP框架RBAC实现原理分析
Feb 01 PHP
详解Laravel设置多态关系模型别名的方式
Oct 17 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
Mar 09 PHP
laravel框架语言包拓展实现方法分析
Nov 22 #PHP
laravel框架邮箱认证实现方法详解
Nov 22 #PHP
laravel 框架结合关联查询 when()用法分析
Nov 22 #PHP
PHP实现微信提现功能(微信商城)
Nov 21 #PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 #PHP
PHP框架实现WebSocket在线聊天通讯系统
Nov 21 #PHP
PHP读取Excel内的图片(phpspreadsheet和PHPExcel扩展库)
Nov 19 #PHP
You might like
用PHP发电子邮件
2006/10/09 PHP
php获取网卡的MAC地址支持WIN/LINUX系统
2014/04/30 PHP
PHP实现的策略模式简单示例
2017/08/25 PHP
PHP设计模式之工厂模式定义与用法详解
2018/04/03 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
在IE浏览器中resize事件执行多次的解决方法
2011/07/12 Javascript
dwz 如何去掉ajaxloading具体代码
2013/05/22 Javascript
jquery mobile动态添加元素之后不能正确渲染解决方法说明
2014/03/05 Javascript
js生成缩略图后上传并利用canvas重绘
2014/05/15 Javascript
node.js中的fs.fchown方法使用说明
2014/12/16 Javascript
javascript查询字符串参数的方法
2015/01/28 Javascript
jQuery实现鼠标点击弹出渐变层的方法
2015/07/09 Javascript
jquery实现叠层3D文字特效代码分享
2015/08/21 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
解决wx.onMenuShareTimeline出现的问题
2016/08/16 Javascript
总结Javascript中数组各种去重的方法
2016/10/04 Javascript
vue组件(全局,局部,动态加载组件)
2018/09/02 Javascript
js 计算月/周的第一天和最后一天代码
2020/02/01 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
Nuxt 项目性能优化调研分析
2020/11/07 Javascript
一文秒懂nodejs中的异步编程
2021/01/28 NodeJs
python抓取豆瓣图片并自动保存示例学习
2014/01/10 Python
python和shell实现的校验IP地址合法性脚本分享
2014/10/23 Python
Python使用poplib模块和smtplib模块收发电子邮件的教程
2016/07/02 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
Python 多维List创建的问题小结
2019/01/18 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
Pandas之Dropna滤除缺失数据的实现方法
2019/06/25 Python
Python grpc超时机制代码示例
2020/09/14 Python
一个入门级python爬虫教程详解
2021/01/27 Python
TensorFlow低版本代码自动升级为1.0版本
2021/02/20 Python
文明礼仪演讲稿
2014/05/12 职场文书
幼儿园健康教育方案
2014/06/14 职场文书
黄河绝恋观后感
2015/06/08 职场文书
企业内部管理控制:银行存款控制制度范本
2020/01/10 职场文书
解决golang在import自己的包报错的问题
2021/04/29 Golang