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 相关文章推荐
杏林同学录(七)
Oct 09 PHP
PHP入门
Oct 09 PHP
php 无限极分类
Mar 27 PHP
php仿discuz分页效果代码
Oct 02 PHP
PHP 生成的XML以FLASH获取为乱码终极解决
Aug 07 PHP
php cc攻击代码与防范方法
Oct 18 PHP
PHP header()函数使用详细(301、404等错误设置)
Apr 17 PHP
thinkPHP5.0框架应用请求生命周期分析
Mar 25 PHP
浅析PHP数据导出知识点
Feb 17 PHP
PHP实现防止表单重复提交功能【基于token验证】
May 24 PHP
PHP获取数据库表中的数据插入新的表再原删除数据方法
Oct 12 PHP
PHP simplexml_load_string()函数实例讲解
Feb 03 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开启安全模式后禁用的函数集合
2011/06/26 PHP
如何使用Linux的Crontab定时执行PHP脚本的方法
2011/12/19 PHP
php实现信用卡校验位算法THE LUHN MOD-10示例
2014/05/07 PHP
DOM基础及php读取xml内容操作的方法
2015/01/23 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
PHP中Trait及其应用详解
2017/02/14 PHP
php使用str_replace替换多维数组的实现方法分析
2017/06/15 PHP
use jscript with List Proxy Server Information
2007/06/11 Javascript
javascript中运用闭包和自执行函数解决大量的全局变量问题
2010/12/30 Javascript
js设置组合快捷键/tabindex功能的方法
2013/11/21 Javascript
JavaScript用select实现日期控件
2015/07/17 Javascript
特殊日期提示功能的实现方法
2016/06/16 Javascript
Highcharts学习之数据列
2016/08/03 Javascript
loading动画特效小结
2017/01/22 Javascript
jQuery多选框选择数量限制方法
2017/02/08 Javascript
jquery实现图片轮播器
2017/05/23 jQuery
React Native第三方平台分享的实例(Android,IOS双平台)
2017/08/04 Javascript
原生JS实现前端本地文件上传
2018/09/08 Javascript
vue+element加入签名效果(移动端可用)
2019/06/17 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
python3 中文乱码与默认编码格式设定方法
2018/10/31 Python
在python中bool函数的取值方法
2018/11/01 Python
详解重置Django migration的常见方式
2019/02/15 Python
python实现最大子序和(分治+动态规划)
2019/07/05 Python
PyTorch之图像和Tensor填充的实例
2019/08/18 Python
M1芯片安装python3.9.1的实现
2021/02/02 Python
美国购车网站:TrueCar
2016/10/19 全球购物
计算机系毕业生推荐信
2013/11/06 职场文书
环境科学专业个人求职信
2013/12/15 职场文书
求职自荐信的格式
2014/04/07 职场文书
高中教师评语大全
2014/04/25 职场文书
小学标准化建设汇报材料
2014/08/16 职场文书
村主任群众路线个人对照检查材料
2014/09/26 职场文书
php去除数组中为0的元素的实例分析
2021/11/17 PHP
使用compose函数优化代码提高可读性及扩展性
2022/06/16 Javascript