2015-11-06 69 views
4

我需要在论坛上授权用户。 因此在刀片中,我在显示表单回复主题之前已经有@can('editPost', $post)。我的PostPolicy类有一个editPost方法,如果它是用户自己的帖子,则验证为true。无模式授权政策

但是,当我想进行简单检查时出现问题,例如deletePost()。这种检查是否Auth::user()->isAdmin

public function deletePost(User $user) { 
    return Auth::user()->isAdmin; 
    // return $user->isAdmin 
} 

然而,这甚至不会被调用,因为我不及格的Post

我的现实世界的应用程序要复杂得多的实例,但我使用isAdmin作为一个简单的例子。

我猜定义$gate->define('deletePost', 'App\Policies\[email protected]');AuthServiceProvider可以工作,但将最终分开我的定义和方法,并最终为大型应用程序杂波AuthServiceProvider

+0

只是为别人寻找的答案,这里有一个好办法在不使用模型bi的情况下注册“全球”政策nding。 http://laravel-tricks.com/tricks/using-51-authorization-without-models –

回答

3

当您注册一个政策,它是用于路由类名对班级进行检查,所以为了将其路由到政策中,您只需传递您注册的类型的班级名称即可。

尝试使用@can( '删除',邮政::类),看看是否让你有

指 照亮\身份验证\访问\门:: firstArgumentCorrespondsToPolicy

编辑 后多一点陷我发现这个 https://github.com/laravel/framework/commit/70f75255808ffc96275e6f2f356616dd2e163434#diff-961368895033e553787b301c3be0e17a

所以看起来,如果你在5.1.23版本,那么你就能够传递一个字符串,否则你将需要只通过新邮

0

在控制器

$this->authorize('<ability>', <Class-With-Rule::class> | <Full-Path-To-Class>); 

刀片鉴于

@can('<ability>', <Class-With-Rule>::class> | <Full-Path-To-Class>) 

雄辩模式

$user->can('<ability>', <Class-With-Rule>::class> | <Full-Path-To-Class>);