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 相关文章推荐
使用MaxMind 根据IP地址对访问者定位
Oct 09 PHP
十天学会php(2)
Oct 09 PHP
php include的妙用,实现路径加密
Jul 29 PHP
用php解析html的实现代码
Aug 08 PHP
php使用Smarty的相关注意事项及访问变量的几种方式
Dec 08 PHP
PHP制作万年历
Jan 07 PHP
PHP识别二维码的方法(php-zbarcode安装与使用)
Jul 07 PHP
php 根据自增id创建唯一编号类
Apr 06 PHP
PHPCrawl爬虫库实现抓取酷狗歌单的方法示例
Dec 21 PHP
PHP实现给定一列字符,生成指定长度的所有可能组合示例
Jun 22 PHP
php中文语义分析实现方法示例
Sep 28 PHP
PHP 99乘法表的几种实现代码
Oct 13 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实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
php微信开发之关注事件
2018/06/14 PHP
js中键盘事件实例简析
2015/01/10 Javascript
js实现横向百叶窗效果网页切换动画效果的方法
2015/03/02 Javascript
JavaScript实现输入框(密码框)出现提示语
2016/01/12 Javascript
jquery实现简单Tab切换菜单效果
2020/07/17 Javascript
Angularjs的Controller间通信机制实例分析
2016/11/07 Javascript
JS日程管理插件FullCalendar简单实例
2017/02/07 Javascript
mpvue开发音频类小程序踩坑和建议详解
2019/03/12 Javascript
微信小程序实现音乐播放器
2019/11/20 Javascript
Vue组件通信入门之Provide和Inject机制
2019/12/29 Javascript
javascript全局自定义鼠标右键菜单
2020/12/08 Javascript
swiper实现导航滚动效果
2020/12/13 Javascript
Python判断值是否在list或set中的性能对比分析
2016/04/16 Python
Python 读取某个目录下所有的文件实例
2018/06/23 Python
在python image 中安装中文字体的实现方法
2019/08/22 Python
详解Python3 pandas.merge用法
2019/09/05 Python
在django中使用post方法时,需要增加csrftoken的例子
2020/03/13 Python
Anaconda3中的Jupyter notebook添加目录插件的实现
2020/05/18 Python
Python实现迪杰斯特拉算法并生成最短路径的示例代码
2020/12/01 Python
pip 20.3 新版本发布!即将抛弃 Python 2.x(推荐)
2020/12/16 Python
美国男装连锁零售商:Men’s Wearhouse
2016/10/14 全球购物
Lampegiganten丹麦:欧洲领先的照明网上商店
2018/04/25 全球购物
Maison Lab荷兰:名牌Outlet购物
2018/08/10 全球购物
拉斯维加斯城市观光通行证:Las Vegas Pass
2019/05/21 全球购物
俄罗斯韩国化妆品网上商店:Cosmasi.ru
2019/10/31 全球购物
亚洲航空公司官方网站:AirAsia
2019/11/25 全球购物
委托书样本
2014/04/02 职场文书
商场促销活动总结
2014/07/10 职场文书
教育系统干部作风整顿心得体会
2014/09/09 职场文书
大学本科生职业生涯规划书范文
2014/09/14 职场文书
2015年银行客户经理工作总结
2015/04/01 职场文书
Windows10下安装MySQL8
2021/04/06 MySQL
「月刊Action」2022年5月号封面公开
2022/03/21 日漫
vue项目打包后路由错误的解决方法
2022/04/13 Vue.js
postgresql中如何执行sql文件
2023/05/08 PostgreSQL