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 相关文章推荐
PHP4之真OO
Oct 09 PHP
转换中文日期的PHP程序
Oct 09 PHP
global.php
Dec 09 PHP
php 时间计算问题小结
Jan 04 PHP
作为PHP程序员应该了解MongoDB的五件事
Jun 03 PHP
php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法
Oct 20 PHP
PHP上传文件参考配置大文件上传
Dec 16 PHP
php利用递归实现删除文件目录的方法
Sep 23 PHP
Eclipse PHPEclipse 配置的具体步骤
Aug 08 PHP
PHP实现更改hosts文件的方法示例
Aug 08 PHP
laravel 数据迁移与 Eloquent ORM的实现方法
Apr 12 PHP
PHP如何实现阿里云短信sdk灵活应用在项目中的方法
Jun 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
ADODB类使用
2006/11/25 PHP
PHP缩略图等比例无损压缩,可填充空白区域补充色
2011/06/10 PHP
教你如何使用php session
2013/10/28 PHP
php观察者模式应用场景实例详解
2017/02/03 PHP
PHP chr()函数讲解
2019/02/11 PHP
PHP学习记录之常用的魔术常量详解
2019/12/12 PHP
jquery清空textarea等输入框实现代码
2013/04/22 Javascript
javascript基础之查找元素的详细介绍(访问节点)
2013/07/05 Javascript
javascript抖动元素的小例子
2013/10/28 Javascript
JS随机漂浮广告代码具体实例
2013/11/19 Javascript
JS基于面向对象实现的放烟花效果
2015/05/07 Javascript
select下拉框插件jquery.editable-select详解
2017/01/22 Javascript
JavaScript+CSS相册特效实例代码
2017/09/07 Javascript
基于 Vue 实现一个酷炫的 menu插件
2017/11/14 Javascript
为什么要使用Vuex的介绍
2019/01/19 Javascript
mocha的时序规则讲解
2019/02/16 Javascript
vue+vuex+axios从后台获取数据存入vuex,组件之间共享数据操作
2020/07/31 Javascript
python正则表达式re模块详细介绍
2014/05/29 Python
python读取TXT到数组及列表去重后按原来顺序排序的方法
2015/06/26 Python
小白入门篇使用Python搭建点击率预估模型
2018/10/12 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
基于Tensorflow的MNIST手写数字识别分类
2020/06/17 Python
Python的3种运行方式:命令行窗口、Python解释器、IDLE的实现
2020/10/10 Python
python 爬取腾讯视频评论的实现步骤
2021/02/18 Python
美国婴童服装市场上的领先品牌:Carter’s
2018/02/08 全球购物
用C语言实现文件读写操作
2013/10/27 面试题
企业消防安全制度
2014/02/02 职场文书
致100米运动员广播稿
2014/02/14 职场文书
《放飞蜻蜓》教学反思
2014/04/27 职场文书
预备党员综合考察材料
2014/05/31 职场文书
企业安全生产标语
2014/06/06 职场文书
死亡赔偿协议书
2015/01/28 职场文书
追悼会悼词大全
2015/06/23 职场文书
nginx rewrite功能使用场景分析
2022/05/30 Servers
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL
python中使用redis用法详解
2022/12/24 Redis