示例#1
0
        /// <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());
        }
示例#2
0
 private void BindIndicatorAttributes()
 {
     TrackActivityAttribute.Bind(this.Kernel);
     PermissionAuthorizeAttribute.Bind(this.Kernel);
 }