From 86aed90177139931df712c64b09df43e3bd594b1 Mon Sep 17 00:00:00 2001 From: SL <123@123.com> Date: Tue, 5 Sep 2023 00:40:37 +0800 Subject: [PATCH] =?UTF-8?q?[UI.Client]=20=E4=BF=AE=E6=AD=A3Role=E7=BC=96?= =?UTF-8?q?=E8=BE=91=E7=95=8C=E9=9D=A2=E4=B8=AD=E6=B2=A1=E6=9C=89=E6=98=BE?= =?UTF-8?q?=E7=A4=BA=E6=9D=83=E9=99=90=E6=9D=A1=E7=9B=AE=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Framework/Common/Account/Extends/Role.cs | 16 ++++++++ .../Common/Account/Extends/RoleLoader.cs | 41 ++++++++++++++----- .../CenterViews/Configs/Roles/RoleManager.cs | 15 +++---- 3 files changed, 52 insertions(+), 20 deletions(-) diff --git a/MECF.Framework.Common/MECF/Framework/Common/Account/Extends/Role.cs b/MECF.Framework.Common/MECF/Framework/Common/Account/Extends/Role.cs index 451f309..a8d45ea 100644 --- a/MECF.Framework.Common/MECF/Framework/Common/Account/Extends/Role.cs +++ b/MECF.Framework.Common/MECF/Framework/Common/Account/Extends/Role.cs @@ -139,5 +139,21 @@ namespace MECF.Framework.Common.Account.Extends #endregion + #region Methods + + /// + /// 获取指定项目的权限。 + /// + /// + /// + public MenuPermissionEnum GetPermission(string name) + { + if (PermissionControlItems.TryGetValue(name, out var permissionEnum)) + return permissionEnum; + + return MenuPermissionEnum.MP_NONE; + } + + #endregion } } diff --git a/MECF.Framework.Common/MECF/Framework/Common/Account/Extends/RoleLoader.cs b/MECF.Framework.Common/MECF/Framework/Common/Account/Extends/RoleLoader.cs index c71773e..429e8a5 100644 --- a/MECF.Framework.Common/MECF/Framework/Common/Account/Extends/RoleLoader.cs +++ b/MECF.Framework.Common/MECF/Framework/Common/Account/Extends/RoleLoader.cs @@ -1,7 +1,6 @@ using System; using System.Collections.Generic; using System.Linq; -using System.ServiceModel.Description; using System.Text; using System.Xml.Linq; using Aitex.Core.RT.Log; @@ -91,25 +90,47 @@ namespace MECF.Framework.Common.Account.Extends var strAutoLogoutTime = roleNode.Attribute("logouttime").Value; int.TryParse(strAutoLogoutTime, out var logoutTime); var isAutoLogout = ((strIsAutoLogout == "1")); - + var strBuildIn = roleNode.Attribute("buildin")?.Value ?? "false"; if (!bool.TryParse(strBuildIn, out var isBuildIn)) isBuildIn = false; - // ID为0 ~ 3的角色强制为系统内置角色,禁止删除 + // ID为0 ~ 3的角色强制为系统内置角色,禁止删除 if (strRoleId is "0" or "1" or "2" or "3") isBuildIn = true; var strDescription = roleNode.Attribute("description")?.Value ?? ""; - + // 旧版的权限保存方式为字符串形式,新版更改为节点列表。 // 为兼容旧格式,此处应该判断roleNode节点中的内容,将旧版自动转换为PermissionControlItem列表 - var permContent= roleNode.Value; - var helper = new PermissionHelper(); - helper.ParsePermission(permContent); - var role = new Role(strRoleId, strRoleName, isAutoLogout, logoutTime, helper.MenuPermissionDictionary, isBuildIn, strDescription); - list.Add(role); + if (roleNode.FirstNode is XText) + { + var permContent = roleNode.Value; + var helper = new PermissionHelper(); + helper.ParsePermission(permContent); + var role = new Role(strRoleId, strRoleName, isAutoLogout, logoutTime, + helper.MenuPermissionDictionary, isBuildIn, strDescription); + list.Add(role); + } + else + { + var permList = new Dictionary(); + foreach (var xe in roleNode.Elements("Perm")) + { + var permName = xe.Attribute("name")?.Value; + var strPermValue = xe.Attribute("value")?.Value ?? "1"; + if (!int.TryParse(strPermValue, out var permValue)) + permValue = (int)MenuPermissionEnum.MP_NONE; + + if (!string.IsNullOrEmpty(permName)) + permList[permName] = (MenuPermissionEnum)permValue; + } + + var role = new Role(strRoleId, strRoleName, isAutoLogout, logoutTime, + permList, isBuildIn, strDescription); + list.Add(role); + } } - + var roleAdmin = new Role("-1", "Administrators", true, 20, null, true, null) { IsSuper = true diff --git a/MECF.Framework.UI.Client/CenterViews/Configs/Roles/RoleManager.cs b/MECF.Framework.UI.Client/CenterViews/Configs/Roles/RoleManager.cs index fd67f49..2a899f3 100644 --- a/MECF.Framework.UI.Client/CenterViews/Configs/Roles/RoleManager.cs +++ b/MECF.Framework.UI.Client/CenterViews/Configs/Roles/RoleManager.cs @@ -84,12 +84,7 @@ namespace MECF.Framework.UI.Client.CenterViews.Configs.Roles foreach (var role in roles) { var ri = new RoleItem(role); - - // 从Role的权限字串创建权限列表。 - var permHelper = new PermissionHelper(); - permHelper.ParsePermission(role.PermissionContent); - - var headerPerm = RolePermissionMapper.FromMenuPermissionEnum(permHelper.GetPermissionByID("Header")); + var headerPerm = RolePermissionMapper.FromMenuPermissionEnum(role.PermissionControlItems["Header"]); var mp = new PermissionControlItem("Header", headerPerm, "Header"); ri.AddMenuInfo(mp); @@ -102,7 +97,7 @@ namespace MECF.Framework.UI.Client.CenterViews.Configs.Roles var appName = topMenuItem.ResKey + "." + subMenuItem.ResKey; var id = subMenuItem.MenuID; var appPerm = RolePermissionMapper.FromMenuPermissionEnum( - permHelper.GetPermissionByID(id)); + role.GetPermission(id)); var perm = new PermissionControlItem(appName, appPerm, id); ri.AddMenuInfo(perm); } @@ -111,7 +106,7 @@ namespace MECF.Framework.UI.Client.CenterViews.Configs.Roles foreach (var recipeInfo in _recipeColumnPermSource) { var recipePerm = RolePermissionMapper.FromMenuPermissionEnum( - permHelper.GetPermissionByID(recipeInfo.Name)); + role.GetPermission(recipeInfo.Name)); var perm = new PermissionControlItem(recipeInfo.Name, recipePerm); ri.AddRecipeInfo(perm); } @@ -119,7 +114,7 @@ namespace MECF.Framework.UI.Client.CenterViews.Configs.Roles foreach (var stepInfo in _recipeStepPermSource) { var stepPerm = RolePermissionMapper.FromMenuPermissionEnum( - permHelper.GetPermissionByID(stepInfo.Name)); + role.GetPermission(stepInfo.Name)); var perm = new PermissionControlItem(stepInfo.Name, stepPerm); ri.AddStepInfo(perm); } @@ -127,7 +122,7 @@ namespace MECF.Framework.UI.Client.CenterViews.Configs.Roles foreach (var contentInfo in _contentPermSource) { var contentPerm = RolePermissionTrueFalseMapper.FromMenuPermissionEnum( - permHelper.GetPermissionByID(contentInfo.Name)); + role.GetPermission(contentInfo.Name)); var perm = new PermissionControlItem(contentInfo.Name, contentPerm, description:contentInfo.Description); ri.AddContentInfo(perm);