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的宝库目录--PEAR
Oct 09 PHP
使用sockets:从新闻组中获取文章(一)
Oct 09 PHP
PHPExcel读取Excel文件的实现代码
Dec 06 PHP
php数组去重的函数代码
Feb 03 PHP
linux环境apache多端口配置虚拟主机的方法深入介绍
Jun 09 PHP
php模板原理讲解
Nov 13 PHP
PHP中使用sleep造成mysql读取失败的案例和解决方法
Aug 21 PHP
PHP实现的观察者模式实例
Jun 21 PHP
ajax+php实现无刷新验证手机号的实例
Dec 22 PHP
php框架CodeIgniter主从数据库配置方法分析
May 25 PHP
PHP的图像处理实例小结【文字水印、图片水印、压缩图像等】
Dec 20 PHP
PHP中迭代器的简单实现及Yii框架中的迭代器实现方法示例
Apr 26 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
那些年我们错过的魔术方法(Magic Methods)
2014/01/14 PHP
php强制用户转向www域名的方法
2015/06/19 PHP
php使用ftp实现文件上传与下载功能
2017/07/21 PHP
php实现的数组转xml案例分析
2019/09/28 PHP
javaScript - 如何引入js代码
2021/03/09 Javascript
短信提示使用 特效
2007/01/19 Javascript
jQuery判断div随滚动条滚动到一定位置后停止
2014/04/02 Javascript
jQuery中$.each使用详解
2015/01/29 Javascript
nodejs URL模块操作URL相关方法介绍
2015/03/03 NodeJs
jQuery对指定元素中指定字符串进行替换的方法
2015/03/17 Javascript
JavaScript AOP编程实例
2015/06/16 Javascript
实例详解JSON数据格式及json格式数据域字符串相互转换
2016/01/07 Javascript
Bootstrap和Angularjs配合自制弹框的实例代码
2016/08/24 Javascript
详解Vue基于 Nuxt.js 实现服务端渲染(SSR)
2018/04/05 Javascript
jQuery实现使用sort方法对json数据排序的方法
2018/04/17 jQuery
javascript实现计算指定范围内的质数示例
2018/12/29 Javascript
JS实现图片幻灯片效果代码实例
2020/05/21 Javascript
小程序富文本提取图片可放大缩小
2020/05/26 Javascript
详解Python中的from..import绝对导入语句
2016/06/21 Python
ActiveMQ:使用Python访问ActiveMQ的方法
2019/01/30 Python
python mac下安装虚拟环境的图文教程
2019/04/12 Python
对python中的float除法和整除法的实例详解
2019/07/20 Python
python 内置函数汇总详解
2019/09/16 Python
Python实时监控网站浏览记录实现过程详解
2020/07/14 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
css3 给页面加个半圆形导航条主要利用旋转和倾斜样式
2014/02/10 HTML / CSS
新西兰廉价汽车租赁:Snap Rentals
2018/09/14 全球购物
在印度上传处方,在线订购药品:Medlife
2019/03/28 全球购物
优秀大学生推荐信范文
2013/11/28 职场文书
商场周年庆活动方案
2014/08/19 职场文书
教师师德师风自我剖析材料
2014/09/29 职场文书
群众路线教育实践活动心得体会(教师)
2014/10/31 职场文书
如何写好开幕词?
2019/06/24 职场文书
诚信高考倡议书
2019/06/24 职场文书
springboot中的pom文件 project报错问题
2022/01/18 Java/Android
Redis实现主从复制方式(Master&Slave)
2022/06/21 Redis