我有一个关于Laravel政策的快速问题。我正在编写一个非常简单的API。我有一个带有一些GET端点的Podcast对象:
GET /api/podcasts => returns all podcasts
GET /api/podcasts/{podcast} => returns a given podcast
我正在使用绑定到Podcast模型的策略。我在$this->authorizeResource(Podcast::class);
类的构造函数中使用了PodcastController
。一切正常,我只能访问自己的播客!
现在,我有子对象,例如文件。所以我创建了一个新的端点:
GET /api/podcasts/{podcast}/files/{file} => returns a specific file of a podcast
我已经将$this->authorizeResource(Podcast::class);
添加到FileController
类的构造函数中。这样做,我不能在URL中输入任何播客ID,只能输入我自己的ID,这很好。但是,我可以在URL中输入任何文件ID,包括不属于我的播客拥有的文件。例如:
GET /api/podcasts/1/files/3
播客#1是我的,这很好。但是文件#3属于播客#2(不是#1),这不是我的。此时,我应该获得未经授权的访问。
有什么主意吗?谢谢
Axel
答案 0 :(得分:0)
我实际上找到了解决方案的开始,但发现它很脏。我写了一个明确的模型绑定条件:
Route::bind('file', function($value, $router) {
return File::where('podcast_id', $router->parameter('podcast'))->findOrFail($value);
});
你们怎么看? 谢谢