通过文档查看
can
中间件并不真正适用于资源。您可以在组上使用多个中间件调用,但这意味着您的使用将需要所有权限才能访问路由。
您的替代方案是:
加
$this->authorize(new App\Project)
到你的
index
和
create
控制器中的方法。 Laravel将使用反射来根据调用它的方法确定要使用的策略。
要么
在里面
__construct()
您可以使用的控制器方法:
$this->authorizeResource(App\Project::class);
</code>
这将需要你
创建
update
,
view
和
delete
Policy类中的方法。将传递这些方法中的每一种
User $user, Project $project
例如
public function view(User $user, Project $project)
{
return true;
}
</code>
仅供参考,如果您省略方法名称
authorize()
或者你用
authorizeResource()
Laravel会将某些方法名称映射到不同的策略方法,即:
[
//ControllerMethod => PolicyMethod
‘show’ => ‘view’,
‘create’ => ‘create’,
‘store’ => ‘create’,
‘edit’ => ‘update’,
‘update’ => ‘update’,
‘destroy’ => ‘delete’,
];
</code>
你可以通过添加一个来覆盖它
resourceAbilityMap()
控制器的方法,并返回上面的一个不同的数组。
希望这可以帮助!