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编码规范-php coding standard
Mar 16 PHP
php下使用SMTP发邮件的代码
Jan 10 PHP
探讨:如何通过stats命令分析Memcached的内部状态
Jun 14 PHP
php分页示例分享
Apr 30 PHP
php+highchats生成动态统计图
May 21 PHP
php查看网页源代码的方法
Mar 13 PHP
浅谈COOKIE和SESSION区别
Jul 19 PHP
mac系统下为 php 添加 pcntl 扩展
Aug 28 PHP
PHP输出多个元素的排列或组合的方法
Mar 14 PHP
PHP实现的数独求解问题示例
Apr 18 PHP
php抽象方法和普通方法的区别点总结
Oct 13 PHP
laravel中Redis队列监听中断的分析
Sep 14 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
PHP4与PHP3中一个不兼容问题的解决方法
2006/10/09 PHP
php中session与cookie的比较
2015/01/27 PHP
thinkphp5实现无限级分类
2019/02/18 PHP
PHP实现长轮询消息实时推送功能代码实例讲解
2021/02/26 PHP
Array对象方法参考
2006/10/03 Javascript
学习YUI.Ext 第三天
2007/03/10 Javascript
重载toString实现JS HashMap分析
2011/03/13 Javascript
js 获取范围内的随机数实例代码
2016/08/02 Javascript
标准的js无缝滚动效果
2016/08/30 Javascript
BootStrap整体框架之基础布局组件
2016/12/15 Javascript
jquery实现页面加载效果
2017/02/21 Javascript
js和jQuery以及easyui实现对下拉框的指定赋值方法
2018/01/23 jQuery
vuejs实现标签选项卡动态更改css样式的方法
2018/05/31 Javascript
vue.js打包之后可能会遇到的坑!
2018/06/03 Javascript
浅谈webpack 四个核心概念之Entry
2019/06/12 Javascript
JS面向对象编程——ES6 中class的继承用法详解
2020/03/03 Javascript
Vue 组件的挂载与父子组件的传值实例
2020/09/02 Javascript
js实现电灯开关效果
2021/01/19 Javascript
Python实现扫描局域网活动ip(扫描在线电脑)
2015/04/28 Python
python获取目录下所有文件的方法
2015/06/01 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
python GUI库图形界面开发之PyQt5动态加载QSS样式文件
2020/02/25 Python
将python字符串转化成长表达式的函数eval实例
2020/05/11 Python
Visual Studio Code搭建django项目的方法步骤
2020/09/17 Python
Python爬虫+tkinter界面实现历史天气查询的思路详解
2021/02/22 Python
英国最受信任的在线眼镜商之一:Fashion Eyewear
2019/10/31 全球购物
ECCO俄罗斯官网:北欧丹麦鞋履及皮具品牌
2020/06/26 全球购物
CK澳大利亚官网:Calvin Klein澳大利亚
2020/12/12 全球购物
编写用C语言实现的求n阶阶乘问题的递归算法
2014/10/21 面试题
工商管理实习生自我鉴定范文
2013/12/18 职场文书
优秀管理者获奖感言
2014/02/17 职场文书
成龙洗发水广告词
2014/03/14 职场文书
运动会加油稿20字
2014/11/15 职场文书
超搞笑婚前保证书
2015/05/08 职场文书
小学体育组工作总结
2015/08/13 职场文书
PL350与SW11的比较
2021/04/22 无线电