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方法并返回它的结果。

(未完待续)

目录
相关文章
|
3月前
|
存储 JSON 数据库
Laravel-EloquentORM高级部分解析
Laravel-EloquentORM高级部分解析
27 0
|
8月前
|
开发框架 关系型数据库 PHP
Laravel
Laravel 是一款基于 PHP 的 Web 应用程序开发框架,它具有简洁、优雅的语法,强大的功能,以及丰富的组件,让开发者能够快速、高效地开发出功能丰富、性能优良的 Web 应用。要用 Laravel,首先需要安装 Laravel。
94 2
|
6月前
|
PHP 开发工具 数据库
laravel系列(二) Dcat admin框架开发工具使用
laravel系列(二) Dcat admin框架开发工具使用
|
数据库连接 PHP
使用composer安装laravel-admin及其过程中遇到的坑
使用composer安装laravel-admin及其过程中遇到的坑
213 0
|
SQL NoSQL 关系型数据库
laravel笔记
laravel笔记
88 0
|
XML 前端开发 安全
Laravel安装指南
Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制,队列改进,动态 Blade 组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。
529 0
laravel练习03
laravel练习03
92 0
laravel练习01
laravel练习01
106 0
|
PHP
【laravel】@10 验证器(2)
【laravel】@10 验证器
80 0
【laravel】@10 验证器(2)
|
PHP
【laravel】@10 验证器(1)
【laravel】@10 验证器
83 0
【laravel】@10 验证器(1)