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 md5下16位和32位的实现代码
Apr 09 PHP
php下删除字符串中HTML标签的函数
Aug 27 PHP
libmysql.dll与php.ini是否真的要拷贝到c:\windows目录下呢
Mar 15 PHP
使用VisualStudio开发php的图文设置方法
Aug 21 PHP
深入理解curl类,可用于模拟get,post和curl下载
Jun 08 PHP
php中的Base62类(适用于数值转字符串)
Aug 12 PHP
PHP+FastCGI+Nginx配置PHP运行环境
Aug 07 PHP
php通过strpos查找字符串出现位置的方法
Mar 17 PHP
Laravel执行migrate命令提示:No such file or directory的解决方法
Mar 16 PHP
PHP实现的进度条效果详解
May 03 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
Oct 28 PHP
深入解析PHP中SESSION反序列化机制
Mar 01 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
追求程序速度,而不是编程的速度
2008/04/23 PHP
PHP中文URL编解码(urlencode()rawurlencode()
2010/07/03 PHP
使用php实现快钱支付功能(涉及到接口)
2013/07/01 PHP
解决PHP 7编译安装错误:cannot stat ‘phar.phar’: No such file or directory
2017/02/25 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
JQuery的ajax获取数据后的处理总结(html,xml,json)
2010/07/14 Javascript
asp.net 30分钟掌握无刷新 Repeater
2011/09/16 Javascript
自己实现string的substring方法 人民币小写转大写,数字反转,正则优化
2012/09/02 Javascript
iframe里的页面禁止右键事件的方法
2014/06/10 Javascript
JS原型、原型链深入理解
2016/02/27 Javascript
jquery配合.NET实现点击指定绑定数据并且能够一键下载
2016/10/28 Javascript
easyui combotree加载静态数据问题(选不上)解决方法
2016/12/26 Javascript
微信小程序选择图片和放大预览图片功能
2017/11/02 Javascript
解决vue单页面修改样式无法覆盖问题
2019/08/05 Javascript
微信小程序实现星级评价
2019/11/20 Javascript
完美解决vue 中多个echarts图表自适应的问题
2020/07/19 Javascript
electron踩坑之dialog中的callback解决
2020/10/06 Javascript
vue3弹出层V3Popup实例详解
2021/01/04 Vue.js
Python转码问题的解决方法
2008/10/07 Python
Python基础知识_浅谈用户交互
2017/05/31 Python
python tkinter实现界面切换的示例代码
2019/06/14 Python
检测python爬虫时是否代理ip伪装成功的方法
2019/07/12 Python
python运用pygame库实现双人弹球小游戏
2019/11/25 Python
Python selenium文件上传下载功能代码实例
2020/04/13 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
extern是什么意思
2016/03/10 面试题
空中乘务员岗位职责
2014/03/08 职场文书
副处级干部考察材料
2014/05/17 职场文书
党员干部四风问题整改措施思想汇报
2014/10/12 职场文书
先进教师个人总结
2015/02/11 职场文书
校长师德表现自我评价
2015/03/05 职场文书
高温慰问简报
2015/07/21 职场文书
聘任协议书(挂靠)
2015/09/21 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书
整理Python中常用的conda命令操作
2021/06/15 Python
阿里云 Windows server 2019 配置FTP
2022/04/28 Servers