Beispiel #1
0
        public JobHelper(IModuleCollection moduleCollection)
        {
            JobModuleDescriptors = new List <JobModuleDescriptor>();
            ModuleSelect         = new List <OptionResultModel>();

            foreach (var module in moduleCollection)
            {
                ModuleSelect.Add(new OptionResultModel
                {
                    Label = module.Name,
                    Value = module.Id
                });

                var jobModuleDescriptor = new JobModuleDescriptor
                {
                    Id             = module.Id,
                    Descriptor     = module,
                    JobClassSelect = new List <OptionResultModel>()
                };

                #region ==添加任务类==

                if (module.AssemblyDescriptor.Quartz != null)
                {
                    var jobClassTypes = module.AssemblyDescriptor.Quartz.GetTypes().Where(m => typeof(IJob).IsAssignableFrom(m));
                    foreach (var jobClassType in jobClassTypes)
                    {
                        var jobClassOption = new OptionResultModel
                        {
                            Label = jobClassType.Name,
                            Value = $"{jobClassType.FullName}, {jobClassType.Assembly.GetName().Name}"
                        };

                        var descAttr = (DescriptionAttribute)Attribute.GetCustomAttribute(jobClassType, typeof(DescriptionAttribute));
                        if (descAttr != null && descAttr.Description.NotNull())
                        {
                            jobClassOption.Label = descAttr.Description;
                        }

                        jobModuleDescriptor.JobClassSelect.Add(jobClassOption);
                    }
                }

                #endregion

                JobModuleDescriptors.Add(jobModuleDescriptor);
            }
        }
        public IResultModel Controllers([BindRequired] string moduleCode)
        {
            var cacheKey = "ADMIN_GET_CONTROLLERS_" + moduleCode.ToUpper();

            if (!_cache.TryGetValue(cacheKey, out List <OptionResultModel> list))
            {
                list = new List <OptionResultModel>();
                var controllerFeature = new ControllerFeature();
                _partManager.PopulateFeature(controllerFeature);
                var controllers = controllerFeature.Controllers.ToList();
                foreach (var controller in controllers)
                {
                    if (!controller.IsAbstract && controller.FullName != null && controller.FullName.ToLower().Contains($".{moduleCode}."))
                    {
                        var option = new OptionResultModel
                        {
                            Value = controller.Name.Remove(controller.Name.Length - 10),
                            Data  = controller.Name
                        };

                        var desc = (DescriptionAttribute)Attribute.GetCustomAttribute(controller, typeof(DescriptionAttribute));
                        if (desc == null || desc.Description.IsNull())
                        {
                            option.Label = option.Value.ToString();
                        }
                        else
                        {
                            option.Label = desc.Description;
                        }

                        list.Add(option);
                    }
                }

                _cache.Set(cacheKey, list);
            }

            return(ResultModel.Success(list));
        }
        public IResultModel Actions([BindRequired] string moduleCode, [BindRequired] string controller)
        {
            var cacheKey = $"ADMIN_GET_ACTIONS_{moduleCode.ToUpper()}_{controller.ToLower()}";

            if (!_cache.TryGetValue(cacheKey, out List <OptionResultModel> list))
            {
                list = new List <OptionResultModel>();
                var controllerFeature = new ControllerFeature();
                _partManager.PopulateFeature(controllerFeature);
                var controllers = controllerFeature.Controllers.ToList();
                foreach (var con in controllers)
                {
                    if (con.FullName != null && con.FullName.ToLower().Contains($".{moduleCode}.") && con.Name.Remove(con.Name.Length - 10).EqualsIgnoreCase(controller))
                    {
                        foreach (var method in con.DeclaredMethods)
                        {
                            //排除可匿名访问以及通用方法
                            if (method.CustomAttributes.Any(m => m.AttributeType == typeof(AllowAnonymousAttribute) || m.AttributeType == typeof(CommonAttribute)))
                            {
                                continue;
                            }

                            var option = new OptionResultModel
                            {
                                Value = method.Name
                            };

                            var descAttr = (DescriptionAttribute)Attribute.GetCustomAttribute(method, typeof(DescriptionAttribute));
                            if (descAttr == null || descAttr.Description.IsNull())
                            {
                                option.Label = option.Value.ToString();
                            }
                            else
                            {
                                option.Label = descAttr.Description;
                            }

                            list.Add(option);
                        }

                        break;
                    }
                }

                _cache.Set(cacheKey, list);
            }

            //排除已添加过得权限
            var permissions = _service.QueryControllerActions(moduleCode, controller).Result;

            list.ForEach(m =>
            {
                foreach (var permission in permissions)
                {
                    if (permission.Action.EqualsIgnoreCase(m.Value.ToString()))
                    {
                        m.Disabled = true;
                        break;
                    }
                }
            });

            return(ResultModel.Success(list));
        }