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 相关文章推荐
MySql中正则表达式的使用方法描述
Jul 30 PHP
用PHP获取Google AJAX Search API 数据的代码
Mar 12 PHP
简单的php新闻发布系统教程
May 09 PHP
WordPress中重置文章循环的rewind_posts()函数讲解
Jan 11 PHP
Laravel+jQuery实现AJAX分页效果
Sep 14 PHP
php多线程并发实现方法
Sep 30 PHP
php实现简单加入购物车功能
Mar 07 PHP
基于win2003虚拟机中apache服务器的访问
Aug 01 PHP
PHP实现根据数组某个键值大小进行排序的方法
Mar 13 PHP
php7函数,声明,返回值等新特性介绍
May 25 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
Dec 20 PHP
php解析非标准json、非规范json的方式实例
Dec 10 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文件的实现方法
2007/03/19 PHP
php中将汉字转换成拼音的函数代码
2012/09/08 PHP
PHP错误和异常处理功能模块示例
2016/11/12 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
Javascript isArray 数组类型检测函数
2009/10/08 Javascript
extjs 学习笔记(二) Ext.Element类
2009/10/13 Javascript
JavaScript中访问节点对象的方法有哪些如何使用
2013/09/24 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
完美兼容各大浏览器获取HTTP_REFERER方法总结
2014/06/24 Javascript
一个仿糯米弹框效果demo
2014/07/22 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
Angular2+如何去除url中的#号详解
2017/12/20 Javascript
浅析前端路由简介以及vue-router实现原理
2018/06/01 Javascript
Vue中"This dependency was not found"问题的解决方法
2018/06/19 Javascript
vue组件中的样式属性scoped实例详解
2018/10/30 Javascript
vue鼠标悬停事件实例详解
2019/04/01 Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
2019/05/28 Javascript
JS数组方法concat()用法实例分析
2020/01/18 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
windows下Python实现将pdf文件转化为png格式图片的方法
2017/07/21 Python
Python实现将json文件中向量写入Excel的方法
2018/03/26 Python
python中使用zip函数出现错误的原因
2018/09/28 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
基于Python+QT的gui程序开发实现
2020/07/03 Python
pandas参数设置的实用小技巧
2020/08/23 Python
澳大利亚领先的女帽及配饰公司:Morgan&Taylor
2019/12/01 全球购物
Contém1g官网:巴西彩妆品牌
2020/01/17 全球购物
什么是smarty? Smarty的优点是什么?
2013/08/11 面试题
小学安全教育月活动总结
2014/07/07 职场文书
运动员获奖感言
2014/08/15 职场文书
2014三年级班主任工作总结
2014/12/05 职场文书
事业单位岗位说明书
2015/10/08 职场文书
pytest进阶教程之fixture函数详解
2021/03/29 Python
教你解决往mysql数据库中存入汉字报错的方法
2021/05/06 MySQL
利用JavaScript写一个简单计算器
2021/11/27 Javascript
MySQL普通表如何转换成分区表
2022/05/30 MySQL