Web API控制器中的授权代码和Authorize属性

时间:2013-04-21 00:11:36

标签: asp.net-mvc-3 web-applications asp.net-web-api

我有以下方法来检索文件夹:

    [HttpGet]
    [Authorize]
    public HttpResponseMessage GetFolder(int id)
    {
        FolderDto folder = _service.GetFolder(id);
        if (folder == null)
        {
            return Request.CreateResponse(HttpStatusCode.NotFound);
        }

        return Request.CreateResponse(HttpStatusCode.Found, folder);
    }

我有授权工作 - 如果用户已登录并使用有效的cookie传递请求,则操作会继续。但我只想让用户获得他的文件夹 - 也就是说,在会员表中具有UserID的用户ID的文件夹。

我是否应该在控制器中为每个WebAPI控制器方法执行此检查,或者是否存在我尚未了解的标准方法。我的直觉告诉我这样做:

    [HttpGet]
    [Authorize]
    public HttpResponseMessage GetFolder(int id)
    {
        FolderDto folder = _service.GetFolder(id);
        if (folder == null || folder.UserId != <userId>) // Or just add another check for HTTPUnauthorized
        {
            return Request.CreateResponse(HttpStatusCode.NotFound);
        }

        return Request.CreateResponse(HttpStatusCode.Found, folder);
    }

思想?

1 个答案:

答案 0 :(得分:0)

如果您只需要在执行其中一个操作期间执行此授权,那么我只需将该代码放入该操作代码中。但是,如果您有多个操作,那么我可能会通过扩展AuthorizeAttribute并在该过滤器中移动文件夹授权的代码来创建授权过滤器。