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 相关文章推荐
实现“上一页”和“下一页按钮
Oct 09 PHP
常用的php对象类型判断
Aug 27 PHP
PHP 日常开发小技巧
Sep 23 PHP
php学习之 认清变量的作用范围
Jan 26 PHP
php数字转汉字代码(算法)
Oct 08 PHP
php多文件上传功能实现原理及代码
Apr 18 PHP
PHP图片上传代码
Nov 04 PHP
php实现递归抓取网页类实例
Apr 03 PHP
PHP结合Jquery和ajax实现瀑布流特效
Jan 07 PHP
Kindeditor编辑器添加图片上传水印功能(php代码)
Aug 03 PHP
PHP从零开始打造自己的MVC框架之路由类实现方法分析
Jun 03 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
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
BBS(php & mysql)完整版(七)
2006/10/09 PHP
php5 pdo新改动加载注意事项
2008/09/11 PHP
php cookie 登录验证示例代码
2009/03/16 PHP
PHP @ at 记号的作用示例介绍
2014/10/10 PHP
Symfony2实现在doctrine中内置数据的方法
2016/02/05 PHP
thinkPHP5使用Rabc实现权限管理
2019/08/28 PHP
如何解决PHP获取不到SESSION信息之一般情况
2019/10/10 PHP
Ext.MessageBox工具类简介
2009/12/10 Javascript
将form表单中的元素转换成对象的方法适用表单提交
2014/05/02 Javascript
使用JQuery在线制作ppt并在线演示源码特效
2015/09/08 Javascript
js实现内容显示并使用json传输数据
2016/03/16 Javascript
AngularJS过滤器filter用法实例分析
2016/11/04 Javascript
vue实现点击选中,其他的不选中方法
2018/09/05 Javascript
JS块级作用域和私有变量实例分析
2019/05/11 Javascript
100行代码实现vue表单校验功能(小白自编)
2019/11/19 Javascript
[01:20:05]DOTA2-DPC中国联赛 正赛 Ehome vs VG BO3 第二场 2月5日
2021/03/11 DOTA
python使用循环实现批量创建文件夹示例
2014/03/25 Python
在Python中操作时间之mktime()方法的使用教程
2015/05/22 Python
python实现用户登录系统
2016/05/21 Python
Python实现的端口扫描功能示例
2018/04/08 Python
Python中pandas dataframe删除一行或一列:drop函数详解
2018/07/03 Python
基于Python批量生成指定尺寸缩略图代码实例
2019/11/20 Python
Python统计时间内的并发数代码实例
2019/12/28 Python
Python中实现一行拆多行和多行并一行的示例代码
2020/09/06 Python
瑞典耳机品牌:URBANISTA
2019/12/03 全球购物
C,C++的几个面试题小集
2013/07/13 面试题
校园招聘策划书
2014/01/09 职场文书
会务接待方案
2014/02/27 职场文书
2014爱耳日宣传教育活动总结
2014/03/09 职场文书
环保建议书作文
2014/03/12 职场文书
我为党旗添光彩演讲稿
2014/09/13 职场文书
2014年乡镇党建工作总结
2014/11/11 职场文书
2014小学语文教学工作总结
2014/12/17 职场文书
入学证明
2015/06/23 职场文书
nginx location 带斜杠【 / 】与不带的区别
2022/04/13 Servers
Win11控制面板快捷键是什么?Win11打开控制面板的方法汇总
2022/07/07 数码科技