using System; using System.Collections.Generic; using System.Collections.ObjectModel; using Aitex.Core.RT.Log; namespace MECF.Framework.Common.Account.Permissions; public class PermissionHelper { #region Variables private readonly Dictionary _dictPerms = new (); #endregion #region Constructors public MenuPermissionEnum this[string permName] => GetPermissionByID(permName); #endregion #region Properties /// /// 返回权限字典。 /// public Dictionary MenuPermissionDictionary => _dictPerms; #endregion #region Methods /// /// 解析_Account.xml文件中的权限字串。 /// /// public void ParsePermission(string permissionString) { try { permissionString = permissionString.Replace("\n", "").Trim(' ').Trim('\t'); var groupIndex = permissionString.IndexOf(';'); if (groupIndex == -1) { AddToDictionary(permissionString); return; } var strGroup = permissionString.Substring(0, groupIndex); AddToDictionary(strGroup); ParsePermission(permissionString.Substring(groupIndex + 1)); } catch (Exception ex) { LOG.Write(ex); } } /// /// 创建保存于_Account.xml中的权限字串。 /// /// 底部菜单栏访问权限列表 /// Recipe列访问权限列表 /// 内容访问权限列表 /// Recipe步骤访问权限列表 /// public static Dictionary PermissionToDictionary(ObservableCollection menuPermission, ObservableCollection recipeColumnsPermission, ObservableCollection contentPermission, ObservableCollection recipeStepPermission) { var dictPerm = new Dictionary(); if (menuPermission == null) return null; foreach (var info in menuPermission) dictPerm.Add(info.ID, info.Permission.EnumValue); foreach (var info in recipeColumnsPermission) dictPerm.Add(info.ID, info.Permission.EnumValue); foreach (var info in contentPermission) dictPerm.Add(info.ID, info.Permission.EnumValue); foreach (var info in recipeStepPermission) dictPerm.Add(info.ID, info.Permission.EnumValue); return dictPerm; } public MenuPermissionEnum GetPermissionByID(string id) { if (MenuPermissionDictionary.TryGetValue(id, out var perm)) return perm; return MenuPermissionEnum.MP_NONE; } private void AddToDictionary(string permItem) { var index = permItem.IndexOf(','); if (index == -1) return; var strMenuID = permItem.Substring(0, index); var strMenuPermission = permItem.Substring(index + 1); // 优化后的MenuPermissionEnum从0开始,原_Account.xml从1开始,而该函数用于解析老的xml文件,因此需要-1。 _dictPerms.Add(strMenuID, (MenuPermissionEnum)Convert.ToInt32(strMenuPermission) - 1); } #endregion }