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动态变静态原理
Nov 25 PHP
php 验证码实例代码
Jun 01 PHP
Session保存到数据库的php类分享
Oct 24 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
Dec 08 PHP
PHP求小于1000的所有水仙花数的代码
Jan 10 PHP
PHP实现定时执行任务的方法
Oct 05 PHP
PHP框架Laravel插件Pagination实现自定义分页
Apr 22 PHP
PHP 闭包详解及实例代码
Sep 28 PHP
php数值转换时间及时间转换数值用法示例
May 18 PHP
修改yii2.0用户登录使用的user表为其它的表实现方法(推荐)
Aug 01 PHP
实例讲解PHP表单验证功能
Feb 15 PHP
PHP实现微信公众号验证Token的示例代码
Dec 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
超级简单的发送邮件程序
2006/10/09 PHP
php中3种方法统计字符串中每种字符的个数并排序
2012/08/27 PHP
php存储过程调用实例代码
2013/02/03 PHP
回帖脱衣服的图片实现代码
2014/02/15 PHP
php生成随机字符串可指定纯数字、纯字母或者混合的
2014/04/18 PHP
laravel 查询数据库获取结果实现判断是否为空
2019/10/24 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
Discuz! 6.1_jQuery兼容问题
2008/09/23 Javascript
jquery控制listbox中项的移动并排序
2009/11/12 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
jQuery实现简单下拉导航效果
2015/09/07 Javascript
浅谈Vue.js应用的四种AJAX请求数据模式
2017/08/30 Javascript
微信小程序数据分析之自定义分析的实现
2018/08/17 Javascript
基于vue写一个全局Message组件的实现
2019/08/15 Javascript
微信小程序使用GoEasy实现websocket实时通讯
2020/05/19 Javascript
Python里disconnect UDP套接字的方法
2015/04/23 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
python与sqlite3实现解密chrome cookie实例代码
2018/01/20 Python
python3+PyQt5实现支持多线程的页面索引器应用程序
2018/04/20 Python
Python画柱状统计图操作示例【基于matplotlib库】
2018/07/04 Python
PyGame贪吃蛇的实现代码示例
2018/11/21 Python
python实现植物大战僵尸游戏实例代码
2019/06/10 Python
python爬虫 猫眼电影和电影天堂数据csv和mysql存储过程解析
2019/09/05 Python
termux中matplotlib无法显示中文问题的解决方法
2021/01/11 Python
乌克兰品牌化妆品和香水在线商店:Bomond
2020/01/14 全球购物
机电工程专业应届生求职信
2013/10/03 职场文书
监理资料员岗位职责
2014/01/03 职场文书
公证委托书
2014/08/01 职场文书
建设办主任四风问题整改思路和措施
2014/09/20 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
致短跑运动员加油稿
2015/07/21 职场文书
工作违纪的检讨书范文
2019/07/09 职场文书
nginx 反向代理之 proxy_pass的实现
2021/03/31 Servers
Laravel中获取IP的真实地理位置
2021/04/01 PHP
pytorch DataLoader的num_workers参数与设置大小详解
2021/05/28 Python
超越Nginx的Web服务器caddy优雅用法
2022/06/21 Servers