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 相关文章推荐
手把手教你使用DedeCms V3的在线采集图文教程
Apr 03 PHP
PHP的SQL注入过程分析
Jan 06 PHP
ThinkPHP之A方法实例讲解
Jun 20 PHP
PHP curl实现抓取302跳转后页面的示例
Jul 04 PHP
PHP动态编译出现Cannot find autoconf的解决方法
Nov 05 PHP
ThinkPHP自动完成中使用函数与回调方法实例
Nov 29 PHP
PHP中的闭包(匿名函数)浅析
Feb 07 PHP
举例详解PHP脚本的测试方法
Aug 05 PHP
PHP二维数组矩形转置实例
Jul 20 PHP
PHP redis实现超迷你全文检索
Mar 04 PHP
laravel接管Dingo-api和默认的错误处理方式
Oct 25 PHP
HTTP头隐藏PHP版本号实现过程解析
Dec 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堆排序实现原理与应用方法
2015/01/03 PHP
php使用get_class_methods()函数获取分类的方法
2016/07/20 PHP
php+js实现的拖动滑块验证码验证表单操作示例【附源码下载】
2020/05/27 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
JavaScript Object的extend是一个常用的功能
2009/12/02 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
容易被忽略的JS脚本特性
2011/09/13 Javascript
js和jquery中循环的退出和继续下一个循环
2014/09/03 Javascript
浅谈JSON中stringify 函数、toJosn函数和parse函数
2015/01/26 Javascript
利用jQuery及AJAX技术定时更新GridView的某一列数据
2015/12/04 Javascript
js+div+css下拉导航菜单完整代码分享
2016/12/28 Javascript
javascript实现下雨效果
2017/03/27 Javascript
VueJS如何引入css或者less文件的一些坑
2017/04/25 Javascript
jquery中封装函数传递当前元素的方法示例
2017/05/05 jQuery
jQuery实现QQ空间汉字转拼音功能示例
2017/07/10 jQuery
vue 验证两次输入的密码是否一致的方法示例
2020/09/29 Javascript
Python字符串处理之count()方法的使用
2015/05/18 Python
Python解析树及树的遍历
2016/02/03 Python
完美解决Python 2.7不能正常使用pip install的问题
2018/06/12 Python
linux安装Python3.4.2的操作方法
2018/09/28 Python
python+opencv 读取文件夹下的所有图像并批量保存ROI的方法
2019/01/10 Python
把JSON数据格式转换为Python的类对象方法详解(两种方法)
2019/06/04 Python
如何通过Python实现标签云算法
2019/07/02 Python
python 串口读取+存储+输出处理实例
2019/12/26 Python
解决pycharm编辑区显示yaml文件层级结构遇中文乱码问题
2020/04/27 Python
python中wheel的用法整理
2020/06/15 Python
为中国消费者甄选天下优品:网易严选
2016/08/11 全球购物
欧洲最大的笔和书写专家:The Pen Shop
2017/03/19 全球购物
PHP面试题及答案二
2015/05/23 面试题
写出二分查找算法的两种实现
2013/05/13 面试题
电信专业应届生自荐信
2013/09/28 职场文书
后勤工作职责
2013/12/22 职场文书
二年级数学教学反思
2014/01/21 职场文书
公司任命书模板
2014/06/06 职场文书
项目负责人岗位职责
2015/02/15 职场文书
独生子女证明范本
2015/06/19 职场文书