0

想象一个个人笔记应用程序。用户可以添加、查看和编辑自己的笔记,但不能添加、查看和编辑属于其他用户的笔记。

通过这种方式访问​​注释:app.dev/notes/{id}

所以很自然,如果我拥有一个 ID 为 的便笺140,但在 URL 中将 id 更改为 160,我将能够查看该便笺。

我想防止这种情况发生。我想过为此使用中间件,但我读到有人说我们不应该为此使用中间件,因为它不灵活,我应该使用 FormRequests 代替。

问题是,我不明白在这种情况下如何使用 FormRequests。我使用 FormRequests 来防止用户编辑不属于他们的笔记。如果我拥有 ID 为 的便笺140,并尝试编辑/发布 ID 为 的便笺160,我的表单请求不会让我这样做。

但是这个 FormRequest 实际上并没有阻止我查看 ID 为160.

有人可以指出我这样做的正确方法吗?

谢谢

4

2 回答 2

1

您可以使用策略。更清洁、更简单的授权方式。

授权策略: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 
}
于 2016-06-06T12:49:48.387 回答
0

我会为此使用中间件。让中间件获取当前用户,检查他们是否有权访问指定的笔记,如果他们无权访问则中止。

如果您使用存储库模式,请确保使用中间件的构造函数来传递任何所需的存储库/依赖项。

于 2015-08-17T05:44:37.583 回答