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件你也许并不了解的事情
Sep 11 PHP
又一个php 分页类实现代码
Dec 03 PHP
PHP 的ArrayAccess接口 像数组一样来访问你的PHP对象
Oct 12 PHP
PHP 删除文件与文件夹操作 unlink()与rmdir()这两个函数的使用
Jul 17 PHP
php中判断数组是一维,二维,还是多维的解决方法
May 04 PHP
phpphp图片采集后按原路径保存图片示例
Feb 18 PHP
ThinkPHP提示错误Fatal error: Allowed memory size的解决方法
Feb 12 PHP
php使用递归函数实现数字累加的方法
Mar 16 PHP
php实现微信公众号无限群发
Oct 11 PHP
laravel中的错误与日志用法详解
Jul 26 PHP
php微信公众号开发之快递查询
Oct 20 PHP
Laravel框架控制器的middleware中间件用法分析
Sep 30 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
现磨咖啡骗局!现磨咖啡=新鲜咖啡?现磨咖啡背后的猫腻你不懂!
2019/03/28 冲泡冲煮
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
thinkPHP5框架导出Excel文件简单操作示例
2018/08/03 PHP
JavaScript 对任意元素,自定义右键菜单的实现方法
2013/05/08 Javascript
jquery中通过父级查找进行定位示例
2013/06/28 Javascript
JS onmousemove鼠标移动坐标接龙DIV效果实例
2013/12/16 Javascript
AngularJS入门教程之学习环境搭建
2014/12/06 Javascript
jQuery实现多级下拉菜单jDropMenu的方法
2015/08/28 Javascript
简单谈谈Javascript中类型的判断
2015/10/19 Javascript
详解Webwork中Action 调用的方法
2016/02/02 Javascript
详解JSON1:使用TSQL查询数据和更新JSON数据
2016/11/21 Javascript
详解vue组件开发脚手架
2018/06/15 Javascript
javascript实现小型区块链功能
2019/04/03 Javascript
JavaScript setInterval()与setTimeout()计时器
2019/12/27 Javascript
[02:05]2014DOTA2西雅图国际邀请赛 BBC第二天小组赛总结
2014/07/11 DOTA
python实现360皮肤按钮控件示例
2014/02/21 Python
详谈Numpy中数组重塑、合并与拆分方法
2018/04/17 Python
Python这样操作能存储100多万行的xlsx文件
2019/04/16 Python
Python3中列表list合并的四种方法
2019/04/19 Python
Python3常用内置方法代码实例
2019/11/18 Python
python hash每次调用结果不同的原因
2019/11/21 Python
使用Html5多媒体实现微信语音功能
2019/07/26 HTML / CSS
韩国爱茉莉太平洋化妆品美国站:Amore Pacific US
2016/10/28 全球购物
Wedgwood美国官网:英国骨瓷,精美礼品及家居装饰
2018/02/17 全球购物
优秀毕业生求职推荐信范文
2013/11/21 职场文书
船舶专业个人求职信范文
2014/01/02 职场文书
企业整改报告范文
2014/11/08 职场文书
预备党员自我评价范文
2015/03/04 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书
2016学习雷锋精神活动倡议书
2015/04/27 职场文书
工作感想范文
2015/08/07 职场文书
小学作文之描写天气
2019/08/15 职场文书
position:sticky 粘性定位的几种巧妙应用详解
2021/04/24 HTML / CSS
详解Java实践之适配器模式
2021/06/18 Java/Android
html+css实现环绕倒影加载特效
2021/07/07 HTML / CSS
Python使用psutil库对系统数据进行采集监控的方法
2021/08/23 Python