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实现小型站点广告管理(修正版)
Oct 09 PHP
深入理解PHP原理之Session Gc的一个小概率Notice
Apr 12 PHP
php中一个完整表单处理实现代码
Nov 10 PHP
采用PHP函数memory_get_usage获取PHP内存清耗量的方法
Dec 06 PHP
PHP防CC攻击实现代码
Dec 29 PHP
Php header()函数语法及使用代码
Nov 04 PHP
php获取系统变量方法小结
May 29 PHP
php比较两个字符串长度的方法
Jul 13 PHP
php微信开发之百度天气预报
Nov 18 PHP
PHP编程 SSO详细介绍及简单实例
Jan 13 PHP
PHP抽象类和接口用法实例详解
Jul 20 PHP
PHP中16个高危函数整理
Sep 19 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
在DC的漫画和电影中,蝙蝠侠的宿敌,小丑的真名是什么?
2020/04/09 欧美动漫
PHP中几种常见的超时处理全面总结
2012/09/11 PHP
解析PHP汉字转换拼音的类
2013/06/18 PHP
如何在HTML 中嵌入 PHP 代码
2015/05/13 PHP
php实现背景图上添加圆形logo图标的方法
2016/11/17 PHP
Yii 框架使用Forms操作详解
2020/05/18 PHP
云网广告中的代码,提示出错,大家找找
2006/11/21 Javascript
Javascript中暂停功能的实现代码
2007/03/04 Javascript
更优雅的事件触发兼容
2011/10/24 Javascript
js实现图片轮换效果代码
2013/04/16 Javascript
jQuery插件zoom实现图片全屏放大弹出层特效
2015/04/15 Javascript
window.onload绑定多个事件的两种解决方案
2016/05/15 Javascript
AngularJS教程之环境设置
2016/08/16 Javascript
bootstrap modal弹出框的垂直居中
2016/12/14 Javascript
EditPlus 正则表达式 实战(3)
2016/12/15 Javascript
JS实现的模仿QQ头像资料卡显示与隐藏效果
2017/04/07 Javascript
浅谈Webpack多页应用HMR卡住问题
2019/04/24 Javascript
js中值引用和地址引用实例分析
2019/06/21 Javascript
Vue发布项目实例讲解
2019/07/17 Javascript
在layui下对元素进行事件绑定的实例
2019/09/06 Javascript
微信小程序实现比较功能的方法汇总(五种方法)
2020/03/07 Javascript
浅谈vant组件Picker 选择器选单选问题
2020/11/04 Javascript
[30:37]【全国守擂赛】第三周擂主赛 Dark Knight vs. Leopard Gaming
2020/05/04 DOTA
Python3.遍历某文件夹提取特定文件名的实例
2018/04/26 Python
python实现得到当前登录用户信息的方法
2019/06/21 Python
python pandas cumsum求累计次数的用法
2019/07/29 Python
Python进程,多进程,获取进程id,给子进程传递参数操作示例
2019/10/11 Python
Python PyPDF2模块安装使用解析
2020/01/19 Python
Django封装交互接口代码
2020/07/12 Python
德国运动鞋网上商店:Afew Store
2018/01/05 全球购物
大学生实习思想汇报
2014/01/12 职场文书
计生工作先进事迹
2014/08/15 职场文书
副总经理岗位职责范本
2015/04/08 职场文书
小学少先队工作总结2015
2015/05/26 职场文书
2015小学新教师个人工作总结
2015/10/14 职场文书
uniapp引入支付宝原生扫码插件步骤详解
2022/07/23 Javascript