授权码,并授权中的WebAPI控制器

问题描述:

我有以下方法来检索文件夹属性:授权码,并授权中的WebAPI控制器

[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的请求,行动收益。但我只想让用户获取属于他的文件夹 - 即在会员表中具有其用户ID的UserId的文件夹。

我是否应该在控制器中为每个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); 
    } 

想法?

+0

您正在显示他们无权访问的用户文件夹,或者您只是想确保他们无权访问这个边缘案例? – 2013-04-21 00:17:51

+0

我想确保用户无法访问不属于他们的文件夹......但我不会将其称为边缘案例。 – SB2055 2013-04-21 00:32:01

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