2011-08-24 140 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

我该如何做重定向? –