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 杂谈《重构-改善既有代码的设计》之一 重新组织你的函数
Apr 09 PHP
PHP漏洞全解(详细介绍)
Nov 13 PHP
php全局变量和类配合使用深刻理解
Jun 05 PHP
php cli配置文件问题分析
Oct 15 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
Dec 31 PHP
解析WordPress中的post_class与get_post_class函数
Jan 04 PHP
Symfony2 session用法实例分析
Feb 04 PHP
PHP中命名空间的使用例子
Mar 22 PHP
Laravel框架实现的上传图片到七牛功能详解
Sep 06 PHP
浅谈thinkphp的nginx配置,以及重写隐藏index.php入口文件方法
Oct 12 PHP
PHP pthreads v3使用中的一些坑和注意点分析
Feb 21 PHP
使用git迁移Laravel项目至新开发环境的步骤详解
Apr 06 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编程网上资源导航
2006/10/09 PHP
PHP网站基础优化方法小结
2008/09/29 PHP
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
php模块memcache和memcached区别分析
2011/06/14 PHP
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
Zend Framework动作助手Json用法实例分析
2016/03/05 PHP
ThinkPHP模板Volist标签嵌套循环输出多维数组的方法
2016/03/23 PHP
JS函数实现动态添加CSS样式表文件
2012/12/15 Javascript
A标签触发onclick事件而不跳转的多种解决方法
2013/06/27 Javascript
不到30行JS代码实现Excel表格的方法
2014/11/15 Javascript
21个JavaScript事件(Events)属性汇总
2014/12/02 Javascript
Javascript无参数和有参数类继承问题解决方法
2015/03/02 Javascript
jquery日历插件e-calendar升级版
2016/11/10 Javascript
Angular.JS中的this指向详解
2017/05/17 Javascript
JS+HTML5实现图片在线预览功能
2017/07/22 Javascript
解决Jquery下拉框数据动态获取的问题
2018/01/25 jQuery
vue awesome swiper异步加载数据出现的bug问题
2018/07/03 Javascript
详解vue中router-link标签所必备了解的属性
2019/04/15 Javascript
jQuery对底部导航进行跳转并高亮显示的实例代码
2019/04/23 jQuery
微信小程序实现左侧滑栏过程解析
2019/08/26 Javascript
解决layer 动态加载select 失效的问题
2019/09/18 Javascript
Vue的click事件防抖和节流处理详解
2019/11/13 Javascript
浅析我对JS延迟异步脚本的思考
2020/10/12 Javascript
微信小程序弹窗禁止页面滚动的实现代码
2020/12/30 Javascript
在Python的循环体中使用else语句的方法
2015/03/30 Python
利用python求相邻数的方法示例
2017/08/18 Python
Python实现的列表排序、反转操作示例
2019/03/13 Python
使用python画社交网络图实例代码
2019/07/10 Python
pytorch torch.nn.AdaptiveAvgPool2d()自适应平均池化函数详解
2020/01/03 Python
keras中的loss、optimizer、metrics用法
2020/06/15 Python
为什么称python为胶水语言
2020/06/16 Python
行政部主管岗位职责
2013/12/28 职场文书
大学生表扬信范文
2014/01/09 职场文书
小学语文教学反思
2014/02/10 职场文书
《春笋》教学反思
2014/04/15 职场文书
2015初中团委工作总结
2015/07/28 职场文书