MVC权限验证过滤器
Action属性,权限设定属性
[AttributeUsage(AttributeTargets.Method, Inherited = true, AllowMultiple = false)] public class PurviewEnumAttribute : Attribute { public string PurviewString { get; set; } public PurviewEnumAttribute(string purview) { this.PurviewString = purview; } }
Action属性,权限验证属性
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false, Inherited = true)] public class SuperICAuthorizeAttribute : AuthorizeAttribute { public string[] ActionPowers { get; set; } public override void OnAuthorization(System.Web.Mvc.AuthorizationContext filterContext) { string controllerName = filterContext.ActionDescriptor.ControllerDescriptor.ControllerName; string actionName = filterContext.ActionDescriptor.ActionName; object[] attributes = filterContext.ActionDescriptor.GetCustomAttributes(typeof(PurviewEnumAttribute), true); if (attributes != null && attributes.Count() > 0) { string power = (attributes[0] as PurviewEnumAttribute).PurviewString; this.ActionPowers = power.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries); } base.OnAuthorization(filterContext); } protected override bool AuthorizeCore(HttpContextBase httpContext) { if (httpContext == null) { return false; } if (ActionPowers == null) { return true; } if (ActionPowers.Length == 0) { return true; } // if (ActionPowers.Any(httpContext.User.IsInRole)) if (ActionPowers.Any((new string[]{"1","2","3","4"}).Contains)) { return true; } else { return false; } } }
使用:Index需要权限为2的才能够进入,SuperICAuthorize过滤器中验证是否具有2的权限
[PurviewEnum("2")] [SuperICAuthorize] public ActionResult Index()