如何在MVC上为某些特定的Controller使用代码添加自定义AuthorizeAttribute?

时间:2014-11-01 10:44:28

标签: c# asp.net .net asp.net-mvc

一般情况下,我们只将属性放在Contoller顶部。像:

[Authorize]
public class XXController : Controller
{

}

但是因为我的项目需要使用第三方二进制DLL。 我们没有源代码来更改二进制dll上的原始控制器,但我们可以忽略默认授权使用一些设置,然后我只想知道是否有可能添加自定义为XXController授权属性使用代码

这是我的CustomAuthorizeAttribute:

public class CustomAuthorizeAttribute : AuthorizeAttribute
{
        public bool IsOnlyAdminAccess {get ;set;}

        public override void OnAuthorization(AuthorizationContext filterContext)
        {
            if (Session.IsAdmin && !IsOnlyAdminAccess )
            {
                  // redirect 
            }
         }
}

所以现在我认为global.aspx上有可能。使用某种方式(只是想法)为特定的Controller添加CustomAuthorizeAttribute:

AddCustomAttributeWayOrMethod(XXController, new CustomAuthorizeAttribute(IsOnlyAdminAccess = true));

有些朋友可能会说我只是将其添加到GlobalFilterCollection,例如:

GlobalFilterCollection.Add(new CustomAuthorizeAttribute ());

但我已经为全局控制器添加它。我只需要我的XXController使用 IsOnlyAdminAccess = true 属性,其他控制器都不需要。

1 个答案:

答案 0 :(得分:0)

如果我是你,我会创建一个原始控制器的子类,并将我的属性放在子类上。

 // this is the other controller in a dll, you don't have the source code
 public controller TheirController {

 // and this is yours, you have it in your code
 // with your custom attribute
 [CustomAttribute]
 public controller YourController : TheirController {

    // all actions are inherited