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);