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 相关文章推荐
怎么样可以把 phpinfo()屏蔽掉?
Nov 24 PHP
PHP提取中文首字母
Apr 09 PHP
Session保存到数据库的php类分享
Oct 24 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
Jul 03 PHP
PHP GD库生成图像的几个函数总结
Nov 19 PHP
PHP中的traits简单使用实例
May 13 PHP
PHP+Ajax 检测网络是否正常实例详解
Dec 16 PHP
PHP 获取指定地区的天气实例代码
Feb 08 PHP
thinkphp5 migrate数据库迁移工具
Feb 20 PHP
PHP设计模式之委托模式定义与用法简单示例
Aug 13 PHP
PHP5.0 TIDY_PARSE_FILE缓冲区溢出漏洞的解决方案
Oct 14 PHP
PHP微商城开源代码实例
Mar 27 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
phpmyadmin 3.4 空密码登录的实现方法
2010/05/29 PHP
通过php动态传数据到highcharts
2017/04/05 PHP
php写app接口并返回json数据的实例(分享)
2017/05/20 PHP
Laravel学习教程之IOC容器的介绍与用例
2017/08/15 PHP
php生成静态页面并实现预览功能
2019/06/27 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
Javascript 同时提交多个Web表单的方法
2009/02/19 Javascript
使用JS CSS去除IE链接虚线框的三种方法
2013/11/14 Javascript
JavaScript中的包装对象介绍
2015/01/27 Javascript
使用AngularJS对路由进行安全性处理的方法
2015/06/18 Javascript
JS+CSS实现仿msn风格选项卡效果代码
2015/10/22 Javascript
基于JavaScript实现百叶窗动画效果不只单纯flas可以实现
2016/02/29 Javascript
js实现小窗口拖拽效果
2016/12/03 Javascript
jQuery使用unlock.js插件实现滑动解锁
2017/04/04 jQuery
vue2.x 父组件监听子组件事件并传回信息的方法
2017/07/17 Javascript
Angular实现响应式表单
2017/08/04 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
[49:27]2018DOTA2亚洲邀请赛 4.4 淘汰赛 TNC vs VG 第一场
2018/04/05 DOTA
python操作xml文件示例
2014/04/07 Python
Python中不同进制互相转换(二进制、八进制、十进制和十六进制)
2015/04/05 Python
python实现批量按比例缩放图片效果
2018/03/30 Python
详解用Python实现自动化监控远程服务器
2019/05/18 Python
Python3列表List入门知识附实例
2020/02/09 Python
Tensorflow tf.tile()的用法实例分析
2020/05/22 Python
使用python-cv2实现视频的分解与合成的示例代码
2020/10/26 Python
CSS3动画和HTML5新特性详解
2020/08/31 HTML / CSS
医学毕业生自我鉴定
2013/10/30 职场文书
八年级物理教学反思
2014/01/19 职场文书
我的老师教学反思
2014/05/01 职场文书
法语专业求职信
2014/07/20 职场文书
大学生毕业个人总结
2015/02/15 职场文书
2015庆祝七一建党节94周年活动总结
2015/03/20 职场文书
同学聚会通知短信
2015/04/20 职场文书
个人工作决心书
2015/09/22 职场文书
22句经典语录:送给优柔寡断和胡思乱想的朋友们
2019/12/13 职场文书
如何打开Win11系统注册表编辑器?Win11注册表编辑器打开修复方法
2022/04/05 数码科技