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

(未完待续)

目录
相关文章
|
20天前
|
前端开发 JavaScript 安全
|
11月前
|
PHP 开发工具 数据库
laravel系列(二) Dcat admin框架开发工具使用
laravel系列(二) Dcat admin框架开发工具使用
220 0
|
SQL NoSQL 关系型数据库
laravel笔记
laravel笔记
101 0
|
XML 前端开发 安全
Laravel安装指南
Laravel 8 通过引入 Laravel Jetstream,模型工厂类,迁移压缩,队列批处理,改善速率限制,队列改进,动态 Blade 组件,Tailwind 分页视图, 时间测试助手,artisan serve 的改进,事件监听器的改进,以及各种其他错误修复和可用性改进,对 Laravel 7.x 继续进行了改善。
555 0
|
设计模式 开发框架 安全
PHP开发框架对比:Laravel、Yii、Tp、Yaf、Swoole
Laravel是一套简洁、优雅的PHP 框架(PHP Web Framework)。让我们可以从杂乱的代码中解脱出来。Laravel可以帮你构建一个完美的网络APP,而且每行代码都可以简洁、富于表达力。
652 0
|
SQL 前端开发 程序员
Laravel和Thinkphp有什么区别,哪个框架好用
Laravel和Thinkphp有什么区别,哪个框架好用
731 0
|
PHP Apache
laravel日常操作
1、创建user表 php artisan make:migration create_users_table --create=users 2、创建控制器(同时创建model) php artisan make:controller PhotoCo...
1007 0
|
中间件 PHP
Laravel实践---middleware生效机制
以前的是5.1版本写的。 现在改成5.6版本。 其中遇到的问题,我会在这个laravel专题中一一指出。
1598 0
|
JSON PHP 数据格式