我做了一個自定義的AuthorizeAttribute負責檢查用戶是否有權訪問給定的資源。爲了使通用的,我需要兩個變量傳遞到屬性:將路由參數傳遞給自定義屬性
- 所請求的資源類型
- 所請求的資源ID
我可以很容易地分辨有人要求其資源類型的屬性,但如何將請求的ID傳遞給屬性?這裏是我的代碼,只有最後一個變量失蹤(標有?
):
[System.Web.Http.Authorize]
[System.Web.Http.RoutePrefix("api/accounts")]
public class AccountController : ApiController
{
[AuthorizeIsOwnResource(ResourcesType = ResourcesTypes.Account, ResourceId = ?)]
[System.Web.Http.HttpGet]
[System.Web.Http.Route("test/{id}")]
public ActionResult Test(string id)
{
return new HttpStatusCodeResult(HttpStatusCode.OK);
}
}
有什麼建議?我想我可以一起刪除屬性參數,並從AuthorizeCore
中的HttpContextBase
中確定請求的資源類型和ID;但它是我唯一的選擇嗎?
您有答案了。我認爲最好的解決方案是從HttpContextBase訪問控制器和動作名稱。它更乾淨,更容易實施,並且不易出錯。 –
在思考了一下這個問題後,我認爲你是對的。我想我甚至可以從HttpContextBase中提取RouteData。我會在測試後發佈解決方案 – MichaelCleverly