我需要在论坛上授权用户。
所以在 Blade 中,我有 @can('editPost', $post)
在显示表单以回复主题之前。我的 PostPolicy
类(class)有 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\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
关于laravel - 无模型的授权策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33576852/