用于检查资源是否归用户所有的中间件

ntz*_*tzm 5 php laravel laravel-5

我在制作中间件时遇到了麻烦,该中间件检查用户是否拥有所请求的资源。

例如,如果用户转到/playlists/1/edit,而他们不拥有播放列表1,则应该显示401错误。

这是我到目前为止的内容:

class CheckOwnership {

    public function handle(Request $request, Closure $next)
    {
        if (Playlist::find($request->route()->parameters()['playlists'])->user_id !== $request->user()->id)
        {
            return response('Unauthorized.', 401);
        }

        return $next($request);
    }

}
Run Code Online (Sandbox Code Playgroud)

这很糟糕,仅适用于播放列表资源,但我找不到更好的方法。

谢谢

Chr*_*ris 5

这可以通过新添加的表单请求验证轻松实现。

您可以在此处详细查看(授权表单请求):http : //laravel.com/docs/5.0/validation#form-request-validation

给出的示例实际上是关于用户尝试编辑他们拥有的评论。

提炼:

表单请求类还包含一个授权方法。在此方法中,您可以检查经过身份验证的用户是否确实有权更新给定资源。例如,如果用户尝试更新博客帖子评论,他们是否真的拥有该评论?

在您的情况下,如果他们不拥有播放列表,只需从授权方法返回 false。