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 相关文章推荐
一个很方便的 XML 类!!原创的噢
Oct 09 PHP
关于PHP中操作MySQL数据库的一些要注意的问题
Oct 09 PHP
PHP_MySQL教程-第一天
Mar 18 PHP
ajax php 实现写入数据库
Sep 02 PHP
如何突破PHP程序员的技术瓶颈分析
Jul 17 PHP
zend Framework中的Layout(模块化得布局)详解
Jun 28 PHP
ThinkPHP采用GET方式获取中文参数查询无结果的解决方法
Jun 26 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
Aug 19 PHP
php几个预定义变量$_SERVER用法小结
Nov 07 PHP
PHP中抽象类、接口的区别与选择分析
Mar 29 PHP
总结PHP内存释放以及垃圾回收
Mar 29 PHP
PHP生成腾讯云COS接口需要的请求签名
May 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
php curl模拟post请求小实例
2013/11/13 PHP
PHP date函数常用时间处理方法
2015/05/11 PHP
yii实现使用CUploadedFile上传文件的方法
2015/12/28 PHP
php依赖注入知识点详解
2019/09/23 PHP
ExtJS 2.0 GridPanel基本表格简明教程
2010/05/25 Javascript
基于jquery+thickbox仿校内登录注册框
2010/06/07 Javascript
js window.onload 加载多个函数和追加函数详解
2014/01/08 Javascript
JavaScript实现向setTimeout执行代码传递参数的方法
2015/04/16 Javascript
javascript关于继承解析
2016/05/10 Javascript
jQuery中 bind的用法简单介绍
2017/02/13 Javascript
vue.js中指令Directives详解
2017/03/20 Javascript
微信小程序 首页制作简单实例
2017/04/07 Javascript
jQuery EasyUI window窗口使用实例代码
2017/12/25 jQuery
深入理解JavaScript的async/await
2018/08/05 Javascript
修改vue+webpack run build的路径方法
2018/09/01 Javascript
详解React项目中碰到的IE问题
2019/03/14 Javascript
layui type2 通过url给iframe子页面传值的例子
2019/09/06 Javascript
layui-table获得当前行的上/下一行数据的例子
2019/09/24 Javascript
关于引入vue.js 文件的知识点总结
2020/01/28 Javascript
jQuery实现回到顶部效果
2020/10/19 jQuery
使用Python的Supervisor进行进程监控以及自动启动
2014/05/29 Python
Python 模拟员工信息数据库操作的实例
2017/10/23 Python
Python3使用正则表达式爬取内涵段子示例
2018/04/22 Python
PyCharm在新窗口打开项目的方法
2019/01/17 Python
浅析Windows 嵌入python解释器的过程
2019/07/26 Python
利用rest framework搭建Django API过程解析
2019/08/31 Python
HTML5的标签的代码的简单介绍 HTML5标签的简介
2012/05/28 HTML / CSS
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
人力资源部经理岗位职责规定
2014/02/23 职场文书
教师党员个人整改措施
2014/10/27 职场文书
答辩状格式范本
2015/05/22 职场文书
清明节随笔
2015/08/15 职场文书
大学生安全教育心得体会
2016/01/15 职场文书
班干部竞选演讲稿(精选5篇)
2019/09/24 职场文书
python设置 matplotlib 正确显示中文的四种方式
2021/05/10 Python
python程序的组织结构详解
2021/12/06 Python