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 相关文章推荐
Win2000+Apache+MySql+PHP4+PERL安装使用小结
Oct 09 PHP
人大复印资料处理程序_查询篇
Oct 09 PHP
php db类库进行数据库操作
Mar 19 PHP
PHP中实现生成静态文件的方法缓解服务器压力
Jan 07 PHP
PHP5多态性与动态绑定介绍
Apr 03 PHP
PHP简单实现文本计数器的方法
Apr 28 PHP
PHP编写daemon process详解及实例代码
Sep 30 PHP
js基于qrcode.js生成二维码的方法【附demo插件源码下载】
Dec 28 PHP
PHP策略模式定义与用法示例
Jul 27 PHP
php mysql PDO 查询操作的实例详解
Sep 23 PHP
ThinkPHP5+UEditor图片上传到阿里云对象存储OSS功能示例
Aug 05 PHP
Laravel监听数据库访问,打印SQL的例子
Oct 24 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判断一个gif图片是否为动态图片的方法
2014/11/19 PHP
PHP实现负载均衡session共享redis缓存操作示例
2018/08/22 PHP
javascript 多种搜索引擎集成的页面实现代码
2010/01/02 Javascript
js中单引号与双引号冲突问题解决方法
2013/10/04 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
jquery实现弹出层效果实例
2015/05/19 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
JQuery实现的按钮倒计时效果
2015/12/23 Javascript
针对后台列表table拖拽比较实用的jquery拖动排序
2016/10/10 Javascript
利用js定义一个导航条菜单
2017/03/14 Javascript
详解nodejs微信公众号开发——4.自动回复各种消息
2017/04/11 NodeJs
OkHttp踩坑随笔为何 response.body().string() 只能调用一次
2018/01/08 Javascript
vue监听用户输入和点击功能
2019/09/27 Javascript
Vue使用NProgress的操作过程解析
2019/10/10 Javascript
JS 遍历 json 和 JQuery 遍历json操作完整示例
2019/11/11 jQuery
[48:11]完美世界DOTA2联赛 Magma vs GXR 第二场 11.07
2020/11/10 DOTA
跟老齐学Python之Import 模块
2014/10/13 Python
Python MySQL数据库连接池组件pymysqlpool详解
2017/07/07 Python
Python八大常见排序算法定义、实现及时间消耗效率分析
2018/04/27 Python
Python实现的连接mssql数据库操作示例
2018/08/17 Python
python读写csv文件方法详细总结
2019/07/05 Python
Python生命游戏实现原理及过程解析(附源代码)
2019/08/01 Python
Python使用pymysql模块操作mysql增删改查实例分析
2019/12/19 Python
Python如何把多个PDF文件合并代码实例
2020/02/13 Python
从多个tfrecord文件中无限读取文件的例子
2020/02/17 Python
windows下的pycharm安装及其设置中文菜单
2020/04/23 Python
小米乌克兰网上商店:Xiaomi.UA
2019/10/29 全球购物
Agoda中文官网:安可达(低价预订全球酒店)
2021/01/18 全球购物
分别介绍一下Session Bean和Entity Bean
2015/03/13 面试题
公司庆典邀请函范文
2014/01/13 职场文书
2014年骨干教师工作总结
2014/12/19 职场文书
2015年园林绿化工作总结
2015/05/23 职场文书
读书笔记怎么写
2015/07/01 职场文书
详解Java实现设计模式之责任链模式
2021/06/23 Java/Android
Java 深入探究讲解简单工厂模式
2022/04/07 Java/Android