Laravel笔记-Laravel 5.3中Gate和授权的改进

简介: 原文地址:https://josephsilber.com/index.php/posts/2016/08/03/authorization-improvements-in-laravel-5-3#table-of-contents阅读完Laravel中认证的改进后,让我们来看看Laravel5.3中授权的改进吧。

原文地址:https://josephsilber.com/index.php/posts/2016/08/03/authorization-improvements-in-laravel-5-3#table-of-contents


阅读完Laravel中认证的改进后,让我们来看看Laravel5.3中授权的改进吧。

注意:

以下将要说明的几个特点,在5.2的版本中已经被介绍过。但是,这些特点在5.3中被稍稍改进,我们会在这里讨论它们。

Laravel授权入门

如果你已经对Laravel的授权系统很熟悉了,你可以跳过这一节。

Laravel的授权主要围绕2个主要概念来实现:

1.Gates

Gate即决定谁拥有进行什么操作的功能权限(谁可以做什么)。使用Gate去注册用户的操作权限,之后核对Gate此用户是否可以进行给定操作。

2.Policy

Policy负责检查单个模型的操作权限。对于系统中每个你想要完成授权的模型,你都需要对应的Policy。

为了弄明白他们是怎么一起起作用的,我们通过命令

php artisan make:policy TaskPolicy

生成一个假定模型Task。生成后,我们添加一个检查用户是否可以更新给定task的简单的更新方法:

namespace App\Policies;

use App\Task;

use App\User;

class TaskPolicy{

    public function update(User $user, Task $task){

        return $user->id === $task->user_id;

    }

}

接下来我们应该向将Policy添加到AuthServiceProvider的Policy以注册到Gate:

protected $policies = [

    \App\Task::class => \App\Policies\TaskPolicy::class,

];

AuthServiceProvider会将Policy注册到Gate。现在开始,所以对模型Task的授权检查都会指向Task Policy。

为了说明,我们新建一个更新给定task的简单路由:

Route::put('tasks/{task}', function (App\Task $task) {

    abort_unless(Gate::allows('update', $task), 403);

    $task->update(request()->input());

});

我们会检查Gate来看是否允许用户更新给定task。Gate会传递当前认证用户以及给定task到Policy中的update方法(如果用户没有登录,Gate会自动拒绝所有权限询问),如果未授权,我们会以403状态终止。

(另外,难道你没爱上abort_unless这个方法吗?我指的是,看一下它!读起来就好像明白了:“除非Gate允许更新task否则程序将终止”。这就是名副其实最好用的Laravel)

轻松地在控制器中授权请求

Laravel中的控制器使用AuthorizesRequests trait来轻松地为任意请求授权。你可以在控制器里调用授权方法,它将在Gate中核对权限。如果没有权限,请求将会自动以403响应终止。

我们来看一个控制器的案例:

use App\Task;

class TaskController

{

        public function update(Task $task)

        {

               $this->authorize('update', $task);

               $task->update(request()->input());

         }

}

和之前一样,Gate将“请教”Policy的update方法并返回它的结果。

(未完待续)

目录
相关文章
|
机器学习/深度学习 传感器 人工智能
【仪酷LabVIEW目标检测插件】手把手教你在LabVIEW中使用深度学习实现产品检测(上)
【仪酷LabVIEW目标检测插件】手把手教你在LabVIEW中使用深度学习实现产品检测(上)
790 1
|
数据可视化 数据处理 Python
数据处理:A New Coefficient of Correlation
数据处理:A New Coefficient of Correlation
|
JavaScript 开发工具 git
VanBlog:真的太丝滑啦,简洁实用优雅的个人博客系统,支持文章、评论、分类、标签一站式管理,赶紧上车
嗨,大家好,我是小华同学。VanBlog是一个基于Vue3、Vite、NaiveUI和TypeScript的开源博客系统,支持Markdown编辑,具备文章发布、评论、分类、标签、搜索等功能。界面简洁美观,响应式设计适用于各种设备。
348 6
VanBlog:真的太丝滑啦,简洁实用优雅的个人博客系统,支持文章、评论、分类、标签一站式管理,赶紧上车
|
安全 Java 数据安全/隐私保护
有哪些场景不适合使用Java反射机制
Java反射机制虽强大,但并非万能。在性能要求极高、安全性严格控制、类结构复杂多变或对象创建频繁的场景下,使用反射可能带来性能下降、安全风险增加等问题,应谨慎选择。
401 11
|
运维 Java Linux
【运维基础知识】掌握VI编辑器:提升你的Java开发效率
本文详细介绍了VI编辑器的常用命令,包括模式切换、文本编辑、搜索替换及退出操作,帮助Java开发者提高在Linux环境下的编码效率。掌握这些命令,将使你在开发过程中更加得心应手。
213 2
|
Cloud Native 持续交付 Docker
云原生技术入门与实践:Docker容器化部署示例
【9月更文挑战第25天】在数字化转型的浪潮下,云原生技术成为推动企业创新的重要力量。本文旨在通过浅显易懂的语言,为初学者揭示云原生技术的核心概念及其应用价值。我们将以Docker容器为例,逐步引导读者了解如何将应用程序容器化,并在云端高效运行。这不仅是对技术趋势的跟随,更是对资源利用和开发效率提升的探索。
243 4
|
存储 关系型数据库 MySQL
MySQL8 中文参考(二十五)(4)
MySQL8 中文参考(二十五)
301 0
|
机器学习/深度学习 传感器 算法
基于Mediapipe深度学习算法的手势识别系统【含python源码+PyqtUI界面+原理详解】-python手势识别 深度学习实战项目
基于Mediapipe深度学习算法的手势识别系统【含python源码+PyqtUI界面+原理详解】-python手势识别 深度学习实战项目
|
Python
在Python中,pandas库的`get_dummies`函数
在Python中,pandas库的`get_dummies`函数
1663 2
|
NoSQL 安全 Redis
redis内存限制与淘汰策略
Redis内存管理包括限制和淘汰策略。`maxmemory`配置参数决定内存上限,无设置时64位系统默认不限制,可能导致系统资源耗尽,生产环境建议设定合理值。当内存满时,未设置淘汰策略会导致写入错误。Redis提供8种淘汰策略,如LRU(最近最少使用)和LFU(最不经常使用),以及随机或基于过期时间的删除。需根据数据重要性、访问频率和一致性选择合适策略。
1468 0

热门文章

最新文章