2023-09-03 23:31:57 +08:00
|
|
|
|
using System.Collections.Generic;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
using System.Collections.ObjectModel;
|
|
|
|
|
using System.Linq;
|
|
|
|
|
using Aitex.Core.RT.Log;
|
2023-09-03 23:31:57 +08:00
|
|
|
|
using Aitex.Core.Util;
|
2023-09-05 00:12:08 +08:00
|
|
|
|
using MECF.Framework.Common.Account;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
using MECF.Framework.Common.Account.Extends;
|
|
|
|
|
using MECF.Framework.Common.DataCenter;
|
2023-05-11 10:12:41 +08:00
|
|
|
|
using MECF.Framework.UI.Client.CenterViews.Editors;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
using MECF.Framework.UI.Client.ClientBase;
|
2023-05-10 16:21:45 +08:00
|
|
|
|
using MECF.Framework.UI.Client.RecipeEditorLib.RecipeModel;
|
2023-09-05 10:20:23 +08:00
|
|
|
|
using MECF.Framework.UI.Core.Accounts;
|
2023-09-04 11:51:05 +08:00
|
|
|
|
using OpenSEMI.ClientBase;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
|
|
|
|
namespace MECF.Framework.UI.Client.CenterViews.Configs.Roles
|
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
public class RoleManager : Singleton<RoleManager>
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
#region Variables
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
private List<AppMenu> _appMenuPermSource;
|
|
|
|
|
private List<PermissionControlItem> _recipeColumnPermSource;
|
|
|
|
|
private List<PermissionControlItem> _recipeStepPermSource;
|
|
|
|
|
private List<PermissionControlItem> _contentPermSource;
|
|
|
|
|
|
|
|
|
|
private readonly RecipeFormatBuilder _recipeBuilder = new();
|
|
|
|
|
private readonly ObservableCollection<RoleItem> _roleContainer = new();
|
|
|
|
|
|
|
|
|
|
#endregion
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
#region Properties
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
|
|
|
|
public ObservableCollection<string> ChamberType { get; set; }
|
|
|
|
|
|
|
|
|
|
public ObservableCollection<ProcessTypeFileItem> ProcessTypeFileList { get; set; }
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
#endregion
|
|
|
|
|
|
|
|
|
|
#region Methods
|
|
|
|
|
|
2023-04-13 11:51:03 +08:00
|
|
|
|
public bool Initialize()
|
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
_roleContainer.Clear();
|
|
|
|
|
var roles = RoleAccountProvider.Instance.GetRoles();
|
2023-04-13 11:51:03 +08:00
|
|
|
|
if (roles == null)
|
|
|
|
|
{
|
|
|
|
|
LOG.Error("GetRoles method failed,in RoleManager");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-05 10:20:23 +08:00
|
|
|
|
var menus = AccountClient.Instance.Service.GetAllMenus();
|
2023-09-04 11:51:05 +08:00
|
|
|
|
_appMenuPermSource = menus;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
if (menus == null)
|
|
|
|
|
{
|
|
|
|
|
LOG.Error("GetMenus method failed,in RoleManager");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
//每个Role下再挂一个Recipe权限
|
|
|
|
|
//Recipe名称从RecipeFormat文件中获取
|
|
|
|
|
var chamberType = QueryDataClient.Instance.Service.GetConfig("System.Recipe.SupportedChamberType");
|
|
|
|
|
if (chamberType == null)
|
|
|
|
|
{
|
|
|
|
|
ChamberType = new ObservableCollection<string>() { "Default" };
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ChamberType = new ObservableCollection<string>(((string)(chamberType)).Split(','));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
var processType = QueryDataClient.Instance.Service.GetConfig("System.Recipe.SupportedProcessType");
|
|
|
|
|
if (processType == null)
|
|
|
|
|
{
|
|
|
|
|
processType = "Process,Routine";
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ProcessTypeFileList = new ObservableCollection<ProcessTypeFileItem>();
|
2023-09-03 23:31:57 +08:00
|
|
|
|
var recipeProcessType = ((string)processType).Split(',');
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
2023-09-03 23:31:57 +08:00
|
|
|
|
_recipeColumnPermSource = _recipeBuilder.GetRecipeColumnPermSource($"{ChamberType[0]}\\{recipeProcessType[0]}", "PM1");
|
|
|
|
|
_recipeStepPermSource = _recipeBuilder.GetRecipeStepPermSource();
|
|
|
|
|
_contentPermSource = _recipeBuilder.GetContentPermSource($"{ChamberType[0]}\\Content", "PM1");
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
// 根据系统中已存在的角色创建Role编辑器左侧的树状列表。
|
|
|
|
|
foreach (var role in roles)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
var ri = new RoleItem(role);
|
2023-09-05 00:40:37 +08:00
|
|
|
|
var headerPerm = RolePermissionMapper.FromMenuPermissionEnum(role.PermissionControlItems["Header"]);
|
2023-09-04 11:51:05 +08:00
|
|
|
|
var mp = new PermissionControlItem("Header", headerPerm, "Header");
|
2023-09-03 23:31:57 +08:00
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
ri.AddMenuInfo(mp);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
|
|
|
|
//Get Menu information
|
2023-09-03 23:31:57 +08:00
|
|
|
|
foreach (var topMenuItem in menus)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
foreach (var subMenuItem in topMenuItem.MenuItems)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
var appName = topMenuItem.ResKey + "." + subMenuItem.ResKey;
|
|
|
|
|
var id = subMenuItem.MenuID;
|
|
|
|
|
var appPerm = RolePermissionMapper.FromMenuPermissionEnum(
|
2023-09-05 00:40:37 +08:00
|
|
|
|
role.GetPermission(id));
|
2023-09-03 23:31:57 +08:00
|
|
|
|
var perm = new PermissionControlItem(appName, appPerm, id);
|
2023-09-04 11:51:05 +08:00
|
|
|
|
ri.AddMenuInfo(perm);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-03 23:31:57 +08:00
|
|
|
|
foreach (var recipeInfo in _recipeColumnPermSource)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
var recipePerm = RolePermissionMapper.FromMenuPermissionEnum(
|
2023-09-05 00:40:37 +08:00
|
|
|
|
role.GetPermission(recipeInfo.Name));
|
2023-09-03 23:31:57 +08:00
|
|
|
|
var perm = new PermissionControlItem(recipeInfo.Name, recipePerm);
|
2023-09-04 11:51:05 +08:00
|
|
|
|
ri.AddRecipeInfo(perm);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-03 23:31:57 +08:00
|
|
|
|
foreach (var stepInfo in _recipeStepPermSource)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
var stepPerm = RolePermissionMapper.FromMenuPermissionEnum(
|
2023-09-05 00:40:37 +08:00
|
|
|
|
role.GetPermission(stepInfo.Name));
|
2023-09-03 23:31:57 +08:00
|
|
|
|
var perm = new PermissionControlItem(stepInfo.Name, stepPerm);
|
2023-09-04 11:51:05 +08:00
|
|
|
|
ri.AddStepInfo(perm);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-03 23:31:57 +08:00
|
|
|
|
foreach (var contentInfo in _contentPermSource)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
var contentPerm = RolePermissionTrueFalseMapper.FromMenuPermissionEnum(
|
2023-09-05 00:40:37 +08:00
|
|
|
|
role.GetPermission(contentInfo.Name));
|
2023-09-03 23:31:57 +08:00
|
|
|
|
var perm = new PermissionControlItem(contentInfo.Name, contentPerm, description:contentInfo.Description);
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
ri.AddContentInfo(perm);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
_roleContainer.Add(ri);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2023-09-04 11:51:05 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 返回包含所有角色的列表。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
2023-04-13 11:51:03 +08:00
|
|
|
|
public List<RoleItem> GetAllRoles()
|
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
return _roleContainer.ToList();
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 新建角色。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="ri"></param>
|
|
|
|
|
/// <param name="reason">新增角色失败的原因。</param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public bool AddRole(RoleItem ri, out string reason)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
reason = "";
|
|
|
|
|
var existRole = FindRoleByName(ri.RoleName);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
if (existRole != null)
|
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
reason = $"the role name {ri.RoleName} already exists in RoleManager";
|
|
|
|
|
LOG.Info($"Add Role failed, {reason}");
|
2023-04-13 11:51:03 +08:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2023-09-04 11:51:05 +08:00
|
|
|
|
existRole = FindRoleByID(ri.RoleId);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
if (existRole != null)
|
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
reason = $"the role ID {ri.RoleId} already exists in RoleManager";
|
|
|
|
|
LOG.Info($"Add Role failed, {reason}");
|
2023-04-13 11:51:03 +08:00
|
|
|
|
return false;
|
|
|
|
|
}
|
2023-09-04 11:51:05 +08:00
|
|
|
|
|
|
|
|
|
_roleContainer.Add(ri);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
2023-09-04 11:51:05 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 创建角色ID。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <returns></returns>
|
2023-04-13 11:51:03 +08:00
|
|
|
|
public string GenerateRoleID()
|
|
|
|
|
{
|
2023-09-04 17:22:01 +08:00
|
|
|
|
// 0 - 3为系统保留ID
|
|
|
|
|
var roleId = 4;
|
|
|
|
|
var ri = FindRoleByID(roleId.ToString());
|
2023-09-04 11:51:05 +08:00
|
|
|
|
while (ri != null)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 17:22:01 +08:00
|
|
|
|
roleId++;
|
|
|
|
|
ri = FindRoleByID(roleId.ToString());
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 17:22:01 +08:00
|
|
|
|
return roleId.ToString();
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
2023-09-04 11:51:05 +08:00
|
|
|
|
|
|
|
|
|
/// <summary>
|
|
|
|
|
/// 查找指定ID的角色。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="ID"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public RoleItem FindRoleByID(string ID)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
return _roleContainer.FirstOrDefault(t => t.RoleId == ID);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
/// <summary>
|
|
|
|
|
/// 查找指定名称的角色。
|
|
|
|
|
/// </summary>
|
|
|
|
|
/// <param name="name"></param>
|
|
|
|
|
/// <returns></returns>
|
|
|
|
|
public RoleItem FindRoleByName(string name)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
return _roleContainer.FirstOrDefault(t => t.RoleName == name);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
2023-09-04 11:51:05 +08:00
|
|
|
|
|
2023-04-13 11:51:03 +08:00
|
|
|
|
public RoleItem CreateRole()
|
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
var r = new RoleItem(GenerateRoleID());
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
|
|
|
|
r.DisplayRoleName = r.RoleName = string.Empty;
|
|
|
|
|
r.DisplayAutoLogoutTime = r.AutoLogoutTime = 10;
|
|
|
|
|
r.DisplayIsAutoLogout = r.IsAutoLogout = false;
|
|
|
|
|
r.DisplayDescription = r.Description = string.Empty;
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
r.MenuPermCollection.Add(new PermissionControlItem( "Header", RolePermissionMapper.None, "Header"));
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
foreach (var topMenuItem in _appMenuPermSource)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
foreach (var subMenuItem in topMenuItem.MenuItems)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
var mp = new PermissionControlItem(topMenuItem.ResKey + "." + subMenuItem.ResKey,
|
|
|
|
|
RolePermissionMapper.None, subMenuItem.MenuID);
|
2023-09-04 11:51:05 +08:00
|
|
|
|
r.MenuPermCollection.Add(mp);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
foreach (var perm in _recipeColumnPermSource)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
var recipe = new PermissionControlItem(perm.Name, RolePermissionMapper.None, perm.Name, perm.Description);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
r.AddRecipeInfo(recipe);
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
foreach (var perm in _recipeStepPermSource)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
var step = new PermissionControlItem(perm.Name, RolePermissionMapper.None, perm.Name, perm.Description);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
r.AddStepInfo(step);
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
foreach (var perm in _contentPermSource)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
var permission = new PermissionControlItem(perm.Name, RolePermissionTrueFalseMapper.No, perm.Name, perm.Description);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
r.AddContentInfo(permission);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return r;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public RoleItem CreateRole(RoleItem role)
|
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
var newRole = new RoleItem(GenerateRoleID())
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
|
|
|
|
RoleName = role.RoleName,
|
|
|
|
|
AutoLogoutTime = role.AutoLogoutTime,
|
|
|
|
|
IsAutoLogout = role.IsAutoLogout,
|
|
|
|
|
Description = role.Description,
|
|
|
|
|
DisplayRoleName = role.DisplayRoleName,
|
|
|
|
|
DisplayAutoLogoutTime = role.DisplayAutoLogoutTime,
|
|
|
|
|
DisplayIsAutoLogout = role.DisplayIsAutoLogout,
|
|
|
|
|
DisplayDescription = role.DisplayDescription
|
|
|
|
|
};
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
foreach (var mInfo in role.MenuPermCollection)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
newRole.AddMenuInfo((PermissionControlItem)mInfo.Clone());
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
foreach (var rInfo in role.RecipePermCollection)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
newRole.AddRecipeInfo((PermissionControlItem)rInfo.Clone());
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
foreach (var sInfo in role.RecipeStepPermCollection)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
newRole.AddStepInfo((PermissionControlItem)sInfo.Clone());
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
foreach (var pInfo in role.ContentPermCollection)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
newRole.AddContentInfo((PermissionControlItem)pInfo.Clone());
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return newRole;
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 17:22:01 +08:00
|
|
|
|
public RoleItem CloneRole(RoleItem ri)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 17:22:01 +08:00
|
|
|
|
var newRole = new RoleItem(ri.RoleId)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 17:22:01 +08:00
|
|
|
|
RoleName = ri.RoleName,
|
|
|
|
|
AutoLogoutTime = ri.AutoLogoutTime,
|
|
|
|
|
IsAutoLogout = ri.IsAutoLogout,
|
|
|
|
|
Description = ri.Description,
|
|
|
|
|
DisplayRoleName = ri.DisplayRoleName,
|
|
|
|
|
DisplayAutoLogoutTime = ri.DisplayAutoLogoutTime,
|
|
|
|
|
DisplayIsAutoLogout = ri.DisplayIsAutoLogout,
|
|
|
|
|
DisplayDescription = ri.DisplayDescription
|
2023-04-13 11:51:03 +08:00
|
|
|
|
};
|
|
|
|
|
|
2023-09-04 17:22:01 +08:00
|
|
|
|
foreach (var mInfo in ri.MenuPermCollection)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
newRole.AddMenuInfo((PermissionControlItem)mInfo.Clone());
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 17:22:01 +08:00
|
|
|
|
foreach (var rInfo in ri.RecipePermCollection)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
newRole.AddRecipeInfo((PermissionControlItem)rInfo.Clone());
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 17:22:01 +08:00
|
|
|
|
foreach (var sInfo in ri.RecipeStepPermCollection)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
newRole.AddStepInfo((PermissionControlItem)sInfo.Clone());
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 17:22:01 +08:00
|
|
|
|
foreach (var pInfo in ri.ContentPermCollection)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-03 23:31:57 +08:00
|
|
|
|
newRole.AddContentInfo((PermissionControlItem)pInfo.Clone());
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return newRole;
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 17:22:01 +08:00
|
|
|
|
public bool CheckAvailable(RoleItem ri)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 17:22:01 +08:00
|
|
|
|
if (ri == null)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
return false;
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
foreach (var r in _roleContainer)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 17:22:01 +08:00
|
|
|
|
if (ri.RoleName == r.RoleName && ri.RoleId != r.RoleId)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
|
|
|
|
LOG.Info("Check account available fail because the name already exists, in RoleManager");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
public bool SaveRole(RoleItem ri)
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
if (!CheckAvailable(ri))
|
2023-04-13 11:51:03 +08:00
|
|
|
|
return false;
|
|
|
|
|
|
2023-09-05 00:12:08 +08:00
|
|
|
|
var role = new Role(
|
2023-09-04 11:51:05 +08:00
|
|
|
|
ri.RoleId,
|
|
|
|
|
ri.RoleName,
|
|
|
|
|
ri.IsAutoLogout,
|
|
|
|
|
ri.AutoLogoutTime,
|
2023-09-05 00:12:08 +08:00
|
|
|
|
PermissionHelper.PermissionToDictionary(ri.MenuPermCollection, ri.RecipePermCollection,
|
2023-09-04 11:51:05 +08:00
|
|
|
|
ri.ContentPermCollection,ri.RecipeStepPermCollection),
|
2023-09-04 16:28:14 +08:00
|
|
|
|
ri.Role.IsBuildIn,
|
2023-09-04 11:51:05 +08:00
|
|
|
|
ri.Description
|
2023-04-13 11:51:03 +08:00
|
|
|
|
);
|
|
|
|
|
|
2023-09-05 00:12:08 +08:00
|
|
|
|
if (RoleAccountProvider.Instance.UpdateRole(role))
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
if (null == FindRoleByID(ri.RoleId))
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
// 如果是新建角色
|
|
|
|
|
var newRole = CloneRole(ri);
|
|
|
|
|
var ret = AddRole(newRole, out var reason);
|
|
|
|
|
if (!ret)
|
|
|
|
|
DialogBox.ShowError($"Add Role failed, {reason}");
|
|
|
|
|
return ret;
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
2023-09-04 11:51:05 +08:00
|
|
|
|
else
|
2023-04-13 11:51:03 +08:00
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
// 刷新当前RoleItem,将保存状态置为已保存。
|
|
|
|
|
ri.RoleName = ri.RoleName;
|
|
|
|
|
ri.IsAutoLogout = ri.IsAutoLogout;
|
|
|
|
|
ri.AutoLogoutTime = ri.AutoLogoutTime;
|
2023-09-04 17:22:01 +08:00
|
|
|
|
ri.IsBuildIn = ri.IsBuildIn;
|
2023-09-04 11:51:05 +08:00
|
|
|
|
ri.Description = ri.Description;
|
|
|
|
|
|
|
|
|
|
foreach (var perm in ri.MenuPermCollection)
|
|
|
|
|
perm.Update();
|
2023-04-13 11:51:03 +08:00
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
foreach (var perm in ri.RecipePermCollection)
|
|
|
|
|
perm.Update();
|
|
|
|
|
|
|
|
|
|
foreach (var perm in ri.RecipeStepPermCollection)
|
|
|
|
|
perm.Update();
|
|
|
|
|
|
|
|
|
|
foreach (var perm in ri.ContentPermCollection)
|
|
|
|
|
perm.Update();
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LOG.Error("UpdateRoles method failed, in RoleManager");
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
public bool DeleteRole(string strRoleID)
|
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
var r = FindRoleByID(strRoleID);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
if (r != null)
|
|
|
|
|
{
|
|
|
|
|
if (RoleAccountProvider.Instance.DeleteRole(strRoleID))
|
|
|
|
|
{
|
2023-09-04 11:51:05 +08:00
|
|
|
|
_roleContainer.Remove(r);
|
2023-04-13 11:51:03 +08:00
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LOG.Error("DeleteRole method failed, in RoleManager");
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
LOG.Warning("Can not find the role to delete, in RoleManager");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
2023-09-03 23:31:57 +08:00
|
|
|
|
|
2023-09-04 11:51:05 +08:00
|
|
|
|
|
|
|
|
|
#endregion
|
|
|
|
|
|
2023-04-13 11:51:03 +08:00
|
|
|
|
}
|
|
|
|
|
}
|