Pis*_*hio 6 authentication laravel laravel-5.1
我需要在论坛上授权用户.所以在刀片中,我@can('editPost', $post)在显示表单以回复主题之前.我的PostPolicy类有一个editPost方法,如果它是用户自己的帖子,则验证为true.
但是,当我想做一个简单的检查时,会出现问题deletePost().这将检查是否Auth::user()->isAdmin
public function deletePost(User $user) {
return Auth::user()->isAdmin;
// return $user->isAdmin
}
Run Code Online (Sandbox Code Playgroud)
但是,这甚至都不会被调用,因为我没有传递一个实例 Post
我的真实世界应用程序要复杂得多,但我用的isAdmin是一个简单的例子.
我猜定义$gate->define('deletePost', 'App\Policies\PostPolicy@deletePost');中AuthServiceProvider可以工作,但将最终分开我的定义和方法,并最终为大型应用程序的混乱AuthServiceProvider
注册策略时,它是用于将检查路由到该类的类名,因此为了被路由到该策略,您只需传递您向其注册的类型的类名即可。
尝试使用@can('delete',Post :: class)看看是否可以到达那里
请参阅Illuminate \ Auth \ Access \ Gate :: firstArgumentCorrespondsToPolicy
编辑经过更多的挖掘后,我发现了这个 https://github.com/laravel/framework/commit/70f75255808ffc96275e6f2f356616dd2e163434#diff-961368895033e553787b301c3be0e17a
因此,如果您使用的是5.1.23版本,则可以传递字符串,否则只需传递新的Post