2013-04-21 153 views
0

我有以下方法來檢索文件夾屬性:授權碼,並授權中的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

回答

0

如果您需要在僅執行其中一個操作的過程中執行此授權,那麼我只需將該代碼放入該操作代碼即可。但是,如果您有多個操作,那麼我可能會通過擴展AuthorizeAttribute並在該過濾器中移動文件夾授權代碼來創建授權過濾器。