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 相关文章推荐
封装一个PDO数据库操作类代码
Sep 09 PHP
php数组函数序列之array_combine() - 数组合并函数使用说明
Oct 29 PHP
学习使用curl采集curl使用方法
Jan 11 PHP
浅析PHP中的字符串编码转换(自动识别原编码)
Jul 02 PHP
ThinkPHP中使用Ueditor富文本编辑器
Sep 02 PHP
全面解读PHP的人气开发框架Laravel
Oct 15 PHP
php简单获取复选框值的方法
May 11 PHP
PHP实现适用于文件内容操作的分页类
Jun 15 PHP
Laravel 5.3 学习笔记之 错误&日志
Aug 28 PHP
iOS10推送通知开发教程
Sep 19 PHP
解决在laravel中leftjoin带条件查询没有返回右表为NULL的问题
Oct 15 PHP
浅谈laravel-admin form中的数据,在提交后,保存前,获取并进行编辑
Oct 21 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中常用编辑器推荐
2007/01/02 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
2013/11/26 PHP
jquery 获取dom固定元素 添加样式的简单实例
2014/02/04 Javascript
yui3的AOP(面向切面编程)和OOP(面向对象编程)
2015/05/01 Javascript
jQuery右下角旋转环状菜单特效代码
2015/08/10 Javascript
node模块机制与异步处理详解
2016/03/13 Javascript
javascript小数精度丢失的完美解决方法
2016/05/31 Javascript
javascript 中的console.log和弹出窗口alert
2016/08/30 Javascript
bootstrap模态框示例代码分享
2017/05/17 Javascript
iscroll-probe实现下拉刷新和下拉加载效果
2017/06/28 Javascript
微信小程序页面生命周期详解
2018/01/31 Javascript
基于Vuex无法观察到值变化的解决方法
2018/03/01 Javascript
Vue2 轮播图slide组件实例代码
2018/05/31 Javascript
Vuex 模块化使用详解
2019/07/31 Javascript
layui自定义验证,用ajax查询后台是否有重复数据,form.verify的例子
2019/09/06 Javascript
Vue+Vuex实现自动登录的知识点详解
2020/03/04 Javascript
[06:23]2014DOTA2西雅图国际邀请赛 小组赛7月12日TOPPLAY
2014/07/12 DOTA
一个简单的python程序实例(通讯录)
2013/11/29 Python
Python实现遍历windows所有窗口并输出窗口标题的方法
2015/03/13 Python
用PyQt进行Python图形界面的程序的开发的入门指引
2015/04/14 Python
Flask框架使用DBUtils模块连接数据库操作示例
2018/07/20 Python
Python中staticmethod和classmethod的作用与区别
2018/10/11 Python
Python opencv实现人眼/人脸识别以及实时打码处理
2019/04/29 Python
Pytorch实验常用代码段汇总
2020/11/19 Python
python读写数据读写csv文件(pandas用法)
2020/12/14 Python
MyFrenchPharma中文网:最大的法国药妆平台
2016/10/07 全球购物
乌克兰网上珠宝商店:GoldSoveren
2020/03/31 全球购物
学校门卫工作职责
2013/12/07 职场文书
高中美术教学反思
2014/01/19 职场文书
音乐教学随笔感言
2014/02/19 职场文书
旅游管理专业大学生职业规划书
2014/02/27 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书
如何用python插入独创性声明
2021/03/31 Python
MySQL笔记 —SQL运算符
2022/01/18 MySQL
Redis 异步机制
2022/05/15 Redis