/// <summary> /// 获取WebApi程序集下的所有Controller下的所有Action的权限信息 /// </summary> /// <returns></returns> public static List <PermissionDefinition> GetAssemblyPermissionAttributes() { List <PermissionDefinition> permissions = new List <PermissionDefinition>(); //获取WebApi程序集 List <Type> assembly = Assembly.Load("CoreMe").GetTypes().AsEnumerable() .Where(type => typeof(ControllerBase).IsAssignableFrom(type)).ToList(); //通过反射得到控制器上的权限特性标签 assembly.ForEach(type => { PermissionAuthorizeAttribute permission = type.GetCustomAttribute <PermissionAuthorizeAttribute>(); RouteAttribute routerAttribute = type.GetCustomAttribute <RouteAttribute>(); if (permission?.Permission != null && routerAttribute?.Template != null) { permissions.Add(new PermissionDefinition(permission.Permission, permission.Module, routerAttribute.Template)); } }); //得到方法上的权限特性标签,并排除无权限及模块的非固定权限 assembly.ForEach(type => { RouteAttribute routerAttribute = type.GetCustomAttribute <RouteAttribute>();//获取方法上的路由特性 if (routerAttribute?.Template != null) { foreach (MethodInfo methodInfo in type.GetMethods()) { HttpMethodAttribute methodHttpAttribute = GetMethodHttpAttribute(methodInfo); //获取方法Http相关特性 foreach (Attribute attribute in methodInfo.GetCustomAttributes()) // { if (attribute is PermissionAuthorizeAttribute permission && !string.IsNullOrEmpty(permission.Permission) && !string.IsNullOrEmpty(permission.Module)) { string actionHttpTemplate = methodHttpAttribute.Template != null ? "/" + methodHttpAttribute.Template + " " : " "; string router = $"{routerAttribute.Template}{actionHttpTemplate}{methodHttpAttribute.HttpMethods.FirstOrDefault()}";//"路由模板"+"Http方法模板"+" "+"http方法" permissions.Add( new PermissionDefinition( permission.Permission, permission.Module, router ) ); } } } } }); return(permissions.Distinct().ToList()); }
private void BindIndicatorAttributes() { TrackActivityAttribute.Bind(this.Kernel); PermissionAuthorizeAttribute.Bind(this.Kernel); }