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 06 PHP
php根据年月获取季度的方法
Mar 31 PHP
PHP JSON出错:Cannot use object of type stdClass as array解决方法
Aug 16 PHP
PHP读取汉字的点阵数据
Jun 22 PHP
PHP设计模式之观察者模式实例
Feb 22 PHP
Laravel 的数据库迁移的方法
Jul 31 PHP
tp5(thinkPHP5)框架连接数据库的方法示例
Dec 24 PHP
浅谈php://filter的妙用
Mar 05 PHP
php中的依赖注入实例详解
Aug 14 PHP
thinkphp 5框架实现登陆,登出及session登陆状态检测功能示例
Oct 10 PHP
PHP getID3类的使用方法学习笔记【附getID3源码下载】
Oct 18 PHP
Laravel 集成微信用户登录和绑定的实现
Dec 27 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二维/三维数组转字符串
2013/09/13 PHP
PHP页面转UTF-8中文编码乱码的解决办法
2015/10/20 PHP
100行PHP代码实现socks5代理服务器
2016/04/28 PHP
CI框架(ajax分页,全选,反选,不选,批量删除)完整代码详解
2016/11/01 PHP
PHP自定义多进制的方法
2016/11/03 PHP
基于Jquery的文字滚动跑马灯插件(一个页面多个滚动区)
2010/07/26 Javascript
JavaScript字符串插入、删除、替换函数使用示例
2013/07/25 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
解决jquery插件冲突的问题
2014/01/23 Javascript
jquery实现类似EasyUI的页面布局可改变左右的宽度
2020/09/12 Javascript
使用jquery实现鼠标滑过弹出更多相关信息层附源码下载
2015/11/23 Javascript
JavaScript中循环遍历Array与Map的方法小结
2016/03/12 Javascript
BootStrap网页中代码显示用法详解
2016/10/21 Javascript
Express之get,pos请求参数的获取
2017/05/02 Javascript
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
Webpack的dll功能使用
2018/06/28 Javascript
layui实现点击按钮给table添加一行
2018/08/10 Javascript
Vue最新防抖方案(必看篇)
2019/10/30 Javascript
微信小程序之左右布局的实现代码
2019/12/13 Javascript
用Python和MD5实现网站挂马检测程序
2014/03/13 Python
python爬虫入门教程之点点美女图片爬虫代码分享
2014/09/02 Python
Python编程中的文件操作攻略
2015/10/16 Python
详解Python使用simplejson模块解析JSON的方法
2016/03/24 Python
python3.x实现发送邮件功能
2018/05/22 Python
Python判断字符串是否为字母或者数字(浮点数)的多种方法
2018/08/03 Python
使用python实现快速搭建简易的FTP服务器
2018/09/12 Python
python调用c++ ctype list传数组或者返回数组的方法
2019/02/13 Python
施工安全协议书
2013/12/11 职场文书
高校教师思想汇报
2014/01/11 职场文书
管理提升方案
2014/06/04 职场文书
2014年小学班主任工作总结
2014/11/08 职场文书
机关单位保密工作责任书
2015/05/11 职场文书
vue首次渲染全过程
2021/04/21 Vue.js
Spring Bean是如何初始化的详解
2022/03/22 Java/Android
python如何为list实现find方法
2022/05/30 Python
MySQL事务的ACID特性以及并发问题方案
2022/07/15 MySQL