2011-08-24 174 views
0

目前我的控制器看起來是這樣的:設置自定義授權角色MVC3

public class ProductBrandsController : Controller 

我讀過網上,我可以將[Authorize]裝飾每一個動作,同時也給整個控制器本身。

是否有某種方式來聲明一個定製的裝飾,所以我只能說這就像這樣:

[Authorize(Roles = "God")] 
public class ProductBrandsController : Controller 

或者,也許是太cumborsome。我不會介意創建一個新的裝飾,並調用它像這樣:

[Administrator] 
public class ProductBrandsController : Controller 

//Or 

[ContentManager] 
public class ProductBrandsController : Controller 

然後,我將創建一個自定義的類來驗證,如果這是在登錄用戶的角色。

關於如何解決這個問題的任何建議?

回答

1

當然,你只需要從ActionFilterAttribute派生。

public class AdministratorRequiredAttribute : ActionFilterAttribute 
{ 
     override OnActionExecuting() { } 
     override OnActionExecuted() { } 
     override OnResultExecuting() { } 
     override OnResultExecuted() { } 
} 

可以重寫OnActionExecuting方法插入邏輯來檢查你的用戶的身份驗證;當它不夠用時,可以使用上下文對象將用戶重定向到action方法之外。

+0

使用您的示例類名稱,我的裝飾器將是:'[AdministratorRequired]'?或者是什麼?爲了完成,可能需要填寫。 :) –

+0

正確。該屬性可以用作'[AdministratorRequired]'或'[AdministratorRequiredAttribute]' - 'Attribute'可以不包含屬性名稱,用於裝飾東西時。 – Tejs

+0

我該如何做重定向? –