想象一下个人笔记应用。用户可以添加,查看和编辑自己的笔记,但不能添加属于其他用户的笔记。
以这种方式访问笔记:app.dev/notes/{id}
很自然地,如果我拥有ID为140
的注释,但在网址中将ID更改为160,我将能够查看此注释。
我想防止这种情况发生。我想过为此使用中间件,但我读过有人说我们不应该使用中间件,因为它不灵活,我应该使用FormRequests。
问题是,我不明白在这种情况下如何使用FormRequests。我已经使用FormRequests阻止用户编辑不属于他们的注释。如果我拥有ID为140
的注释,并尝试编辑/发布ID为160
的注释,我的表单请求将不允许我这样做。
但是这个FormRequest实际上并没有阻止我查看ID为160
的笔记。
有人可以指出我这样做的正确方法吗?
谢谢
答案 0 :(得分:1)
您可以使用政策。更清晰,更简单的授权方式。
Authorization Policy : Laravel
创建并注册策略后,您可以执行类似
的操作public function access(User $user, Note $note)
{
return $user->id === $note->user_id;
}
然后在你的方法
if (!$user->cannot('access', $note))
{
// throw error or redirect somewhere else
}
答案 1 :(得分:0)
我会为此使用中间件。让中间件获取当前用户,检查他们是否可以访问指定的注释,如果他们没有访问权限则中止。
如果您使用存储库模式,请确保使用中间件的构造函数来传递任何所需的存储库/依赖项。