跳过基于另一个过滤器asp .net的过滤器执行
本文关键字:过滤器 asp net 执行 另一个 | 更新日期: 2023-09-27 18:12:12
我有一个操作被授权如下:
[Authorize(Roles = "Admin, Agency, Subscribed, Normal")]
public ActionResult LocationProfile()
{}
我需要的是添加另一个过滤器,在授权过滤器之前执行,如果结果为真,则不执行授权属性并直接执行我的操作(LocationProfile())
有没有办法完成这个任务
您必须使用自己的内置该功能的Authorize属性版本。来自上面链接的c#角帖:
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
Entities context = new Entities(); // my entity
private readonly string[] allowedroles;
public CustomAuthorizeAttribute(params string[] roles)
{
this.allowedroles = roles;
}
protected override bool AuthorizeCore(HttpContextBase httpContext)
{
bool authorize = false;
foreach (var role in allowedroles)
{
var user = context.AppUser.Where(m => m.UserID == GetUser.CurrentUser/* getting user form current context */ && m.Role == role &&
m.IsActive == true); // checking active users with allowed roles.
if (user.Count() > 0)
{
authorize = true; /* return true if Entity has current user(active) with specific role */
}
}
return authorize;
}
protected override void HandleUnauthorizedRequest(AuthorizationContext filterContext)
{
filterContext.Result = new HttpUnauthorizedResult();
}
}
在AuthorizeCore方法中,您需要为描述的情况添加检查。