/// <summary> /// 从配置文件读取配置 /// </summary> /// <param name="sectionNodePath">配置节点的路径</param> /// <returns></returns> public static PermissionValidateConfig GetConfig(string sectionNodePath = "") { if (config != null) { return config; } else { if (string.IsNullOrWhiteSpace(sectionNodePath) == false) { config = (PermissionValidateConfig)ConfigurationManager.GetSection(sectionNodePath); } else { config = (PermissionValidateConfig)ConfigurationManager.GetSection("generalValidate"); if (config == null) { config = (PermissionValidateConfig)ConfigurationManager.GetSection("permissionValidate/generalValidate"); } } return config; } }
/// <summary> /// 从配置文件自动构建权限配置对象 /// </summary> /// <param name="parent"></param> /// <param name="configContext"></param> /// <param name="section"></param> /// <returns></returns> public object Create(object parent, object configContext, XmlNode section) { PermissionValidateConfig config = new PermissionValidateConfig(); foreach (XmlNode applicationNode in section.ChildNodes) { PermissionValidateApplication application = new PermissionValidateApplication(); application.Name = applicationNode.Attributes["name"].Value; application.Guid = new Guid(applicationNode.Attributes["guid"].Value); application.IsVisible = XmlHelper.GetNodeValue<bool>(applicationNode,string.Empty,"isVisible",true); foreach (XmlNode moduleNode in applicationNode.ChildNodes) { PermissionValidateModule module = new PermissionValidateModule(); module.Name = moduleNode.Attributes["name"].Value; module.Guid = new Guid(moduleNode.Attributes["guid"].Value); module.IsVisible = XmlHelper.GetNodeValue<bool>(moduleNode, string.Empty, "isVisible", true); foreach (XmlNode subModuleNode in moduleNode.ChildNodes) { PermissionValidateSubModule subModule = new PermissionValidateSubModule(); subModule.Name = subModuleNode.Attributes["name"].Value; subModule.Guid = new Guid(subModuleNode.Attributes["guid"].Value); subModule.IsVisible = XmlHelper.GetNodeValue<bool>(subModuleNode, string.Empty, "isVisible", true); XmlNodeList operationNodeList = subModuleNode.SelectNodes("operation"); foreach (XmlNode operationNode in operationNodeList) { int actionValue = 0; bool isOkValue = int.TryParse(operationNode.Attributes["value"].Value, out actionValue); if (isOkValue == true) { string operationName = operationNode.Attributes["name"].Value; string operationText = operationName; XmlAttribute actionTextAttribute = operationNode.Attributes["text"]; if (actionTextAttribute != null) { operationText = actionTextAttribute.Value; } string operationArea = operationNode.GetNodeValue(string.Empty,"area"); string operationController = operationNode.GetNodeValue(string.Empty, "controller"); string operationAction = operationNode.GetNodeValue(string.Empty, "action"); bool isVisible = operationNode.GetNodeValue<bool>(string.Empty, "isVisible", true); PermissionValidateOperation operation = new PermissionValidateOperation(operationName, operationText, actionValue, operationController, operationAction, operationArea, isVisible); subModule.Operations.Add(operationName, operation); } } module.SubModules.Add(subModule.Guid, subModule); } application.Modules.Add(module.Guid, module); } config.Applications.Add(application.Guid, application); } config.OptimizeStrcture(); return config; }
/// <summary> /// 获取ACA对应的资源所需要的权限值 /// </summary> /// <param name="config"></param> /// <param name="areaName"></param> /// <param name="controllerName"></param> /// <param name="actionName"></param> /// <returns></returns> /// <remarks> /// 通过areaName, controllerName, actionName获取其对应的子模块guid以及当前权限项的值 KVP对,如果没有匹配到合适的值,返回null /// </remarks> private static KeyValuePair<Guid, int>? GetPermissionInfo(PermissionValidateConfig config, string areaName, string controllerName, string actionName) { Dictionary<Guid, PermissionValidateSubModule> allSubModelDic = config.AllSubModuleDic; foreach (KeyValuePair<Guid, PermissionValidateSubModule> subModule in allSubModelDic) { Dictionary<string, PermissionValidateOperation> operations = subModule.Value.Operations; foreach (KeyValuePair<string, PermissionValidateOperation> operateKVP in operations) { PermissionValidateOperation operation = operateKVP.Value; if (operation.Action.ToLower() == actionName.ToLower() && operation.Controller.ToLower() == controllerName.ToLower() && operation.Area.ToLower() == areaName.ToLower()) { return new KeyValuePair<Guid, int>( subModule.Key,operation.Value); } } } return null; }