Laravel 5授权服务中存储的能力在哪里?

问题描述:

用于在Laravel文档的Authorization服务的部分指出了一些例子,如:Laravel 5授权服务中存储的能力在哪里?

// Models 
if ($request->user()->can('update-post', $post)) { 
    // Update Post... 
} 

// Views 
@can('update-post', $post) 
    <a href="/post/{{ $post->id }}/edit">Edit Post</a> 
@endcan 

但是,没有提及任何形式的migrationschema

abilities如何以及在哪里存储?

+0

'能力'在[服务提供者](https://laravel.com/docs/5.2/authorization#defining-abilities)和/或[策略类](https://laravel.com)中定义/docs/5.2/authorization#policies)。这些功能的逻辑取决于您的要求。 – Fiete

+0

我的答案是否有意义,或者你想要更多的澄清任何事情? –

定义了授权规则的工作方式。也许这将涉及数据库表或其他数据,但它将全部由您自定义。例如,查看"Defining Abilities" section of the docs以了解如何实现update-post的能力。

在你AuthServiceProvider

public function boot(GateContract $gate) 
{ 
    $this->registerPolicies($gate); 

    $gate->define('update-post', function ($user, $post) { 
     return $user->id === $post->user_id; 
    }); 
} 

这只是检查,如果对某个帖子的user_id是一样的一个在user_id通过。但是,这是你定义你的特定逻辑的地方。

Laracasts有一个非常棒的video series on ACL,清除了很多。

+0

权限存储在哪里? – user2094178

+0

您自己创建权限,然后定义它们。例如,在这种情况下,我正在创建一个名为'update-post'的权限。它只是“存储”在代码中。它只是一个函数,它接受一个帖子和一个用户,并检查帖子的user_id是否与用户的id相同。你可以根据你的需要定义这些权限,但是有一些不必要的权限表(除非你自己设置一个权限并让所有的权限运行)。 –

+0

但这就是Laravel授权所做的一切 - 为您提供一种简单,更清晰的编写函数*的方法,您可以完全自己编写函数*,其中规则*完全由您自己构成*,与权限功能相关。 –