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

(未完待续)

目录
相关文章
|
开发框架 关系型数据库 PHP
Laravel
Laravel 是一款基于 PHP 的 Web 应用程序开发框架,它具有简洁、优雅的语法,强大的功能,以及丰富的组件,让开发者能够快速、高效地开发出功能丰富、性能优良的 Web 应用。要用 Laravel,首先需要安装 Laravel。
169 2
|
5月前
|
开发框架 前端开发 JavaScript
Laravel
【7月更文挑战第21天】
46 4
|
PHP 开发工具 数据库
laravel系列(二) Dcat admin框架开发工具使用
laravel系列(二) Dcat admin框架开发工具使用
347 0
|
中间件 Python
Python编程:Django中间件实现登陆验证
Python编程:Django中间件实现登陆验证
197 5
Python编程:Django中间件实现登陆验证
|
SQL NoSQL 关系型数据库
laravel笔记
laravel笔记
115 0
|
设计模式 开发框架 安全
PHP开发框架对比:Laravel、Yii、Tp、Yaf、Swoole
Laravel是一套简洁、优雅的PHP 框架(PHP Web Framework)。让我们可以从杂乱的代码中解脱出来。Laravel可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
717 0
laravel练习01
laravel练习01
141 0
laravel练习03
laravel练习03
124 0
|
中间件 Python
django 1.8 官方文档翻译: 3-6-1 中间件概览
Django 文档协作翻译小组人手紧缺,有兴趣的朋友可以加入我们,完全公益性质。 交流群:467338606 网站:http://python.usyiyi.cn/django/index.html 中间件 中间件是一个介入Django的请求和响应的处理过程中的钩子框架。
1057 4