Laravel 5.2授权使用用户模型的can方法

时间:2017-03-14 01:42:28

标签: laravel-5.2

使用用户模型的时候我有一个问题,但是不能用方法。我有一个帖子模型和一个用户模型。我在PostPolicy类中定义了一个add方法:

public function add(User $user){
    if($user->isGuest()) return false;
    return true;
}

我知道当使用或不能使用方法时,将使用的策略类将由我们传递给的模型实例自动解决,可以是或不可以像$user->can('update',$post)那样的方法。但在这个例子中。 add方法不需要post实例,所以我不能这样做$user->can('add',$post)。有人能告诉我如何完成它吗?

1 个答案:

答案 0 :(得分:1)

这是一个很好的问题。

有趣的是,Laravel 5.2没有记录,但它是5.4。所以你必须在Laravel 5.2中检查这是否适合你。

如果您没有要将对象模型传入策略检查,则文档说明您应该将其传递给Model::class。在您的情况下,它是Post::class作为参数。所以它是:

$user->can('update', Post::class);

如果这在Laravel 5.2中不起作用,您可以随时编写Gate而不是策略,只需使用Gate::allows()Gate::denies方法:

https://laravel.com/docs/5.2/authorization#gates