我创造了一个 政策 </跨度> 在laravel 5.3中有两个动作:
class ProjectPolicy { … 公共功能索引(用户$用户) { 返回true; } public function create(User $ user锟笨(‘projects’,‘ProjectController’);});
当然我已经创建了Project model和 调节器 </跨度> 正确,但调用索引和创建操作始终返回403禁止响应。这个问题在哪里?
通过文档查看 can 中间件并不真正适用于资源。您可以在组上使用多个中间件调用,但这意味着您的使用将需要所有权限才能访问路由。
can
您的替代方案是:
加 $this->authorize(new App\Project) 到你的 index 和 create 控制器中的方法。 Laravel将使用反射来根据调用它的方法确定要使用的策略。
$this->authorize(new App\Project)
index
create
要么
在里面 __construct() 您可以使用的控制器方法:
__construct()
$this->authorizeResource(App\Project::class);
这将需要你 创建 update , view 和 delete Policy类中的方法。将传递这些方法中的每一种 User $user, Project $project 例如
update
view
delete
User $user, Project $project
public function view(User $user, Project $project) { return true; }
仅供参考,如果您省略方法名称 authorize() 或者你用 authorizeResource() Laravel会将某些方法名称映射到不同的策略方法,即:
authorize()
authorizeResource()
[ //ControllerMethod => PolicyMethod 'show' => 'view', 'create' => 'create', 'store' => 'create', 'edit' => 'update', 'update' => 'update', 'destroy' => 'delete', ];
你可以通过添加一个来覆盖它 resourceAbilityMap() 控制器的方法,并返回上面的一个不同的数组。
resourceAbilityMap()
希望这可以帮助!