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
但是,没有提及任何形式的migration
和schema
。
abilities
如何以及在哪里存储?
您定义了授权规则的工作方式。也许这将涉及数据库表或其他数据,但它将全部由您自定义。例如,查看"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,清除了很多。
权限存储在哪里? – user2094178
您自己创建权限,然后定义它们。例如,在这种情况下,我正在创建一个名为'update-post'的权限。它只是“存储”在代码中。它只是一个函数,它接受一个帖子和一个用户,并检查帖子的user_id是否与用户的id相同。你可以根据你的需要定义这些权限,但是有一些不必要的权限表(除非你自己设置一个权限并让所有的权限运行)。 –
但这就是Laravel授权所做的一切 - 为您提供一种简单,更清晰的编写函数*的方法,您可以完全自己编写函数*,其中规则*完全由您自己构成*,与权限功能相关。 –
'能力'在[服务提供者](https://laravel.com/docs/5.2/authorization#defining-abilities)和/或[策略类](https://laravel.com)中定义/docs/5.2/authorization#policies)。这些功能的逻辑取决于您的要求。 – Fiete
我的答案是否有意义,或者你想要更多的澄清任何事情? –