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+MySql编写聊天室
Oct 09 PHP
7个超级实用的PHP代码片段
Jul 11 PHP
PHP时间戳与日期之间转换的实例介绍
Apr 19 PHP
分割GBK中文遭遇乱码的解决方法
Aug 09 PHP
php中使用getimagesize获取图片、flash等文件的尺寸信息实例
Apr 29 PHP
YII路径的用法总结
Jul 09 PHP
php获取本周星期一具体日期的方法
Apr 20 PHP
php-redis中的sort排序函数总结
Jul 08 PHP
Yii实现Command任务处理的方法详解
Jul 14 PHP
Laravel 5.3 学习笔记之 安装
Aug 28 PHP
设定php简写功能的方法
Nov 28 PHP
PHP Beanstalkd消息队列的安装与使用方法实例详解
Feb 21 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如何抛出异常处理错误
2011/03/02 PHP
PHP和Mysqlweb应用开发核心技术 第1部分 Php基础-1 开始了解php
2011/07/03 PHP
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
php中引用符号(&)的使用详解
2013/11/13 PHP
PHP getallheaders无法获取自定义头(headers)的问题
2016/03/23 PHP
PHP+JS实现的商品秒杀倒计时用法示例
2016/11/15 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
异步加载script的代码
2011/01/12 Javascript
JavaScript实现生成GUID(全局统一标识符)
2014/09/05 Javascript
Jquery实现由下向上展开效果的例子
2014/12/08 Javascript
js将滚动条滚动到指定位置的简单实现方法
2016/06/25 Javascript
KnockoutJS 3.X API 第四章之数据控制流component绑定
2016/10/10 Javascript
使用ionic切换页面卡顿的解决方法
2016/12/16 Javascript
详解nodejs微信公众号开发——1.接入微信公众号
2017/04/10 NodeJs
详解在vue-cli项目中安装node-sass
2017/06/21 Javascript
vue中子组件向父组件传递数据的实例代码(实现加减功能)
2018/04/20 Javascript
Python通过future处理并发问题
2017/10/17 Python
轻松实现TensorFlow微信跳一跳的AI
2018/01/05 Python
Python在for循环中更改list值的方法【推荐】
2018/08/17 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
python爬取网易云音乐评论
2018/11/16 Python
Python OpenCV实现鼠标画框效果
2020/08/19 Python
Python实现的微信红包提醒功能示例
2019/08/22 Python
TensorFlow 显存使用机制详解
2020/02/03 Python
python利用pytesseract 实现本地识别图片文字
2020/12/14 Python
Python用requests库爬取返回为空的解决办法
2021/02/21 Python
关于box-sizing的全面理解
2016/07/28 HTML / CSS
关于祖国的演讲稿
2014/05/04 职场文书
党委班子剖析材料
2014/08/21 职场文书
大学生英文求职信范文
2015/03/19 职场文书
2015年中秋放假通知范文
2015/08/18 职场文书
大学学生会主席竞选稿
2015/11/19 职场文书
详解CocosCreator消息分发机制
2021/04/16 Javascript
GoLang中生成UUID唯一标识的实现
2021/05/08 Golang
springboot如何初始化执行sql语句
2021/06/22 Java/Android
springboot用户数据修改的详细实现
2022/04/06 Java/Android