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脚本的10个技巧(6)
Oct 09 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
Aug 23 PHP
php笔记之:php函数range() round()和list()的使用说明
Apr 26 PHP
php中count获取多维数组长度的方法
Nov 03 PHP
php查询mssql出现乱码的解决方法
Dec 29 PHP
解决ThinkPHP关闭调试模式时报错的问题汇总
Apr 22 PHP
jQuery+Ajax+PHP“喜欢”评级功能实现代码
Oct 08 PHP
PHP中类的继承和用法实例分析
May 24 PHP
Zend Framework动作控制器用法示例
Dec 09 PHP
PHP简单计算两个时间差的方法示例
Jun 20 PHP
Smarty缓存机制实例详解【三种缓存方式】
Jul 20 PHP
PHP使用PDO实现mysql防注入功能详解
Dec 20 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
实时抓取YAHOO股票报价的代码
2006/10/09 PHP
CentOS 6.2使用yum安装LAMP以及phpMyadmin详解
2013/06/17 PHP
PHP简单实现模拟登陆功能示例
2017/09/15 PHP
javascript multibox 全选
2009/03/22 Javascript
js实现拖拽 闭包函数详细介绍
2012/11/25 Javascript
可自己添加html的伪弹出框实现代码
2013/09/08 Javascript
js判断客户端是iOS还是Android等移动终端的方法
2013/12/11 Javascript
javascript中实现兼容JAVA的hashCode算法代码分享
2020/08/11 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
什么是 AngularJS?AngularJS简介
2014/12/06 Javascript
node.js中的fs.readFileSync方法使用说明
2014/12/15 Javascript
jQuery实现Tab选项卡切换效果简单演示
2015/11/23 Javascript
js与applet相互调用的方法
2016/06/22 Javascript
Google Maps基础及实例解析
2016/08/06 Javascript
JS实现遍历不规则多维数组的方法
2018/03/21 Javascript
vue项目前端知识点整理【收藏】
2019/05/13 Javascript
JS学习笔记之贪吃蛇小游戏demo实例详解
2019/05/29 Javascript
Vue商品控件与购物车联动效果的实例代码
2019/07/21 Javascript
vue 解决移动端弹出键盘导致页面fixed布局错乱的问题
2019/11/06 Javascript
5分钟快速看懂ES6中的反射与代理
2019/12/19 Javascript
JavaScript 防抖和节流遇见的奇怪问题及解决
2020/11/20 Javascript
对pandas里的loc并列条件索引的实例讲解
2018/11/15 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
详解python播放音频的三种方法
2019/09/23 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
2019/11/15 Python
使用Python实现画一个中国地图
2019/11/23 Python
Pytorch mask_select 函数的用法详解
2020/02/18 Python
python实现图片横向和纵向拼接
2020/03/05 Python
python绘制高斯曲线
2021/02/19 Python
HTML5 Web Workers之网站也能多线程的实现
2013/04/24 HTML / CSS
煤矿班组长竞聘书
2014/03/31 职场文书
营销与策划专业求职信
2014/06/20 职场文书
教师节老师寄语
2015/05/28 职场文书
Redis集群节点通信过程/原理流程分析
2022/03/18 Redis
5人制售《绝地求生》游戏外挂获利500多万元 被判刑
2022/03/31 其他游戏
ICOM R71E和R72E图文对比解说
2022/04/07 无线电