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初学者头痛的十四个问题
Jul 12 PHP
实现“上一页”和“下一页按钮
Oct 09 PHP
建立动态的WML站点(一)
Oct 09 PHP
在字符串指定位置插入一段字符串的php代码
Feb 16 PHP
PHP中如何判断AJAX提交的数据
Feb 05 PHP
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 2611816 bytes)
Nov 08 PHP
php将12小时制转换成24小时制的方法
Mar 31 PHP
PHP实现的同步推荐操作API接口案例分析
Nov 30 PHP
php实现留言板功能
Mar 05 PHP
[原创]PHP获取数组表示的路径方法分析【数组转字符串】
Sep 01 PHP
在Laravel5.6中使用Swoole的协程数据库查询
Jun 15 PHP
PHP For循环字母A-Z当超过26个字母时输出AA,AB,AC
Feb 16 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
Apache中php.ini的设置方法
2013/02/28 PHP
Ubuntu12下编译安装PHP5.3开发环境
2015/03/27 PHP
thinkphp5 加载静态资源路径与常量的方法
2017/12/24 PHP
js模拟弹出效果代码修正版
2008/08/07 Javascript
广泛收集的jQuery拖放插件集合
2012/04/09 Javascript
Js判断CSS文件加载完毕的具体实现
2014/01/17 Javascript
我的NodeJs学习小结(一)
2014/07/06 NodeJs
javascript实现表单提交后,提交按钮不可用的方法
2015/04/18 Javascript
Javascript递归打印Document层次关系实例分析
2015/05/15 Javascript
javascript实现的字符串与十六进制表示字符串相互转换方法
2015/07/17 Javascript
JavaScript正则表达式exec/g实现多次循环用法示例
2017/01/17 Javascript
nodejs搭建本地服务器轻松解决跨域问题
2018/03/21 NodeJs
基于Vue实现拖拽效果
2018/04/27 Javascript
vue动态添加路由addRoutes之不能将动态路由存入缓存的解决
2019/02/19 Javascript
vue-cli3 DllPlugin 提取公用库的方法
2019/04/24 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
ES6 Promise对象概念及用法实例详解
2019/10/15 Javascript
selenium+java中用js来完成日期的修改
2019/10/31 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
[04:30]显微镜下的DOTA2第五期——拉比克
2013/09/26 DOTA
[00:52]DOTA2国际邀请赛
2020/02/21 DOTA
python中反射用法实例
2015/03/27 Python
Python注释详解
2016/06/01 Python
Python实现爬取亚马逊数据并打印出Excel文件操作示例
2019/05/16 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
Html5实现文件异步上传功能
2017/05/19 HTML / CSS
Nike加拿大官网:Nike.com (CA)
2019/04/09 全球购物
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
我的中国梦口号
2014/06/16 职场文书
大学生党员个人对照检查材料范文
2014/09/25 职场文书
乡镇干部个人整改措施思想汇报
2014/10/10 职场文书
小学教师暑期培训心得体会
2016/01/09 职场文书
党员心得体会范文2016
2016/01/23 职场文书
中国现代文学之经典散文三篇
2019/09/18 职场文书
Django中session进行权限管理的使用
2021/07/09 Python
教你nginx跳转配置的四种方式
2022/07/07 Servers