public IEnumerable<FunctionDto> Invoke(Type target) { var result = new List<FunctionDto>(); var targetType = target; if (!targetType.IsDefined(typeof(SystemModelAttribute), false)) { return result; } var methods = targetType.GetMethods(); var functionPermissionValue = (from methodInfo in methods where methodInfo.IsDefined(typeof(PermissionSettingAttribute), false) select methodInfo.GetCustomAttribute<PermissionSettingAttribute>()).Aggregate( PermissionValue.None, (current, permissionSetting) => current | permissionSetting.PermissionValue); var description = targetType.GetCustomAttribute<SystemModelAttribute>(); var areaName = this.GetArea(target); var function = new FunctionDto() { FunctionName = description.Name, ModelName = areaName, PermissionValue = functionPermissionValue }; result.Add(function); return result; }
/// <summary> /// 解析Controller类型来收集Attribute信息. /// </summary> /// <param name="target"> /// The target. /// </param> /// <returns> /// The <see cref="IEnumerable"/>. /// </returns> public IEnumerable<FunctionDto> Invoke(Type target) { var result = new List<FunctionDto>(); var targetType = target; // 是否使用SystemModelAttribute if (!targetType.IsDefined(typeof(SystemModelAttribute), false)) { return result; } // 获取所有Controller里的方法 var methods = targetType.GetMethods(); // 获取功能模块的具体权限,必须是使用了PermissionSettingAttribute定义权限值,并取所有功能的并运算 // 例如:一个Controller里只定义了Create和Edit,那么这个功能模块的权限就是 Create|Edit var functionPermissionValue = (from methodInfo in methods where methodInfo.IsDefined(typeof(PermissionSettingAttribute), false) select methodInfo.GetCustomAttribute<PermissionSettingAttribute>()).Aggregate( PermissionValue.None, (current, permissionSetting) => current | permissionSetting.PermissionValue); // 获取SystemModelAttribute具体的信息 var description = targetType.GetCustomAttribute<SystemModelAttribute>(); var areaName = this.GetArea(target); var function = new FunctionDto() { FunctionName = description.Name, ModelName = areaName, PermissionValue = functionPermissionValue }; result.Add(function); return result; }