一般情况下,我们只将属性放在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 属性,其他控制器都不需要。
答案 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