Laravel - 只允许注释的所有者查看并编辑它:Middleware或FormRequests?

时间:2015-08-17 05:26:29

标签: php laravel laravel-5 laravel-middleware

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

以这种方式访问​​笔记:app.dev/notes/{id}

很自然地,如果我拥有ID为140的注释,但在网址中将ID更改为160,我将能够查看此注释。

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

问题是,我不明白在这种情况下如何使用FormRequests。我已经使用FormRequests阻止用户编辑不属于他们的注释。如果我拥有ID为140的注释,并尝试编辑/发布ID为160的注释,我的表单请求将不允许我这样做。

但是这个FormRequest实际上并没有阻止我查看ID为160的笔记。

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

谢谢

2 个答案:

答案 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)

我会为此使用中间件。让中间件获取当前用户,检查他们是否可以访问指定的注释,如果他们没有访问权限则中止。

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