using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Xml.Linq; using FabConnect.SecsGemInterface.Application.Objects.ProcessManagement; namespace MECF.Framework.Common.Account.Extends { public class RoleLoader : XmlLoader { private List m_rolelist; private List m_accountlist; public List RoleList { get { return m_rolelist; } set { m_rolelist = value; } } public List AccountList { get { return m_accountlist; } set { m_accountlist = value; } } public RoleLoader(string p_strPath) : base(p_strPath) { } public List GetRoles() { return m_rolelist.Where((Role e) => !e.IsSuper).ToList(); } public List GetAccounts() { return m_accountlist.Where((AccountEx e) => !e.IsSuper).ToList(); } protected override void AnalyzeXml() { if (m_xdoc == null) { return; } IEnumerable enumerable = from r in m_xdoc.Descendants("roleItem") select (r); List list = new List(); bool flag = false; foreach (XElement item5 in enumerable) { string value = item5.Attribute("id").Value; string value2 = item5.Attribute("name").Value; string value3 = item5.Attribute("autologout").Value; string value4 = item5.Attribute("logouttime").Value; int.TryParse(value4, out var result); flag = ((value3 == "1") ? true : false); string p_strDescription = ""; if (item5.Attribute("description") != null) { p_strDescription = item5.Attribute("description").Value; } string value5 = item5.Value; Role item = new Role(value, value2, flag, result, value5, p_strDescription); list.Add(item); } Role item2 = new Role("-1", "Administrators", p_bAutoLogout: true, 20, null, null) { IsSuper = true }; list.Add(item2); m_rolelist = list; enumerable = from r in m_xdoc.Descendants("userItem") select (r); List list2 = new List(); foreach (XElement item6 in enumerable) { List list3 = new List(); string value6 = item6.Attribute("id").Value; string value7 = item6.Attribute("loginname").Value; string p_strPassword = Decrypt(item6.Attribute("password").Value); string value8 = item6.Attribute("firstname").Value; string value9 = item6.Attribute("lastname").Value; string value10 = item6.Attribute("email").Value; string p_strDescription2 = ""; if (item6.Attribute("description") != null) { p_strDescription2 = item6.Attribute("description").Value; } IEnumerable enumerable2 = from ro in item6.Descendants("role") select (ro); foreach (XElement item7 in enumerable2) { string value11 = item7.Attribute("id").Value; list3.Add(value11); } AccountEx item3 = new AccountEx(value6, value7, p_strPassword, value8, value9, value10, list3, p_strDescription2); list2.Add(item3); } AccountEx item4 = new AccountEx("-1", "admin", "admin", "", "", "", new List { "-1" }) { IsSuper = true }; list2.Add(item4); m_accountlist = list2; } public bool UpdateRole(Role p_newRole) { Role role = m_rolelist.Find((Role item) => item.RoleID == p_newRole.RoleID); if (role == null) { m_rolelist.Add(p_newRole); } else { m_rolelist[m_rolelist.IndexOf(role)] = p_newRole; } XDocument xdoc = m_xdoc; List list = (from m_xRole in xdoc.Descendants("roleItem") where m_xRole.Attribute("id").Value == p_newRole.RoleID select m_xRole).ToList(); if (list.Count > 0) { list[0].Attribute("name").Value = p_newRole.RoleName; list[0].Attribute("autologout").Value = (p_newRole.IsAutoLogout ? "1" : "0"); list[0].Attribute("logouttime").Value = p_newRole.LogoutTime.ToString(); if (list[0].Attribute("description") != null) { list[0].Attribute("description").Value = p_newRole.Description.ToString(); } list[0].Value = p_newRole.MenuPermission; } else { XElement content = new XElement("roleItem", new XAttribute("id", p_newRole.RoleID), new XAttribute("name", p_newRole.RoleName), new XAttribute("autologout", p_newRole.IsAutoLogout ? "1" : "0"), new XAttribute("logouttime", p_newRole.LogoutTime), new XAttribute("description", p_newRole.Description)) { Value = p_newRole.MenuPermission }; xdoc.Root.Element("roles").Add(content); } xdoc.Save(m_strPath); return true; } public bool DeleteRole(string p_strRoleID) { Load(); Role m_role = m_rolelist.Find((Role item) => item.RoleID == p_strRoleID); if (m_role != null) { m_rolelist.Remove(m_role); XDocument xdoc = m_xdoc; List list = (from m_xRole in xdoc.Descendants("roleItem") where m_xRole.Attribute("id").Value == p_strRoleID select m_xRole).ToList(); if (list.Count > 0) { list[0].Remove(); foreach (AccountEx item in m_accountlist) { if (item.RoleIDs.Contains(m_role.RoleID)) { item.RoleIDs.Remove(m_role.RoleID); } } list = (from m_xRole in xdoc.Descendants("role") where m_xRole.Attribute("id").Value == m_role.RoleID select m_xRole).ToList(); if (list.Count > 0) { list.Remove(); } xdoc.Save(m_strPath); return true; } return false; } return false; } private List GetRolePermission(string roleid) { List result = new List(); foreach (Role item in m_rolelist) { if (item.RoleID == roleid) { result = item.MenuPermission.Split(';').ToList(); break; } } return result; } private int GetMenuPermission(List rolePermissions, string menuid) { foreach (string rolePermission in rolePermissions) { if (rolePermission.IndexOf(menuid) >= 0) { string[] array = rolePermission.Split(','); if (array.Length > 1 && array[0].Trim() == menuid) { return int.Parse(array[1].Trim()); } } } return 3; } public List GetMenusByRole(string roleid, List menulist) { List list = new List(); List rolePermission = GetRolePermission(roleid); foreach (AppMenu item in menulist) { List list2 = new List(); foreach (AppMenu menuItem in item.MenuItems) { AppMenu appMenu = new AppMenu(menuItem.MenuID, menuItem.ViewModel, menuItem.ResKey, null); appMenu.System = menuItem.System; appMenu.AlarmModule = menuItem.AlarmModule; appMenu.Permission = GetMenuPermission(rolePermission, menuItem.MenuID); if (appMenu.Permission > 1) { list2.Add(appMenu); } } if (list2.Count > 0) { AppMenu appMenu2 = new AppMenu(item.MenuID, item.ViewModel, item.ResKey, list2); appMenu2.System = item.System; appMenu2.AlarmModule = item.AlarmModule; list.Add(appMenu2); } } return list; } public int GetMenuPermission(string roleid, string menuName) { List rolePermission = GetRolePermission(roleid); return GetMenuPermission(rolePermission, menuName); } public bool UpdateAccount(AccountEx p_newAccount) { AccountEx accountEx = m_accountlist.Find((AccountEx item) => item.UserID == p_newAccount.UserID); if (accountEx == null) { m_accountlist.Add(p_newAccount); } else { m_accountlist[m_accountlist.IndexOf(accountEx)] = p_newAccount; } XDocument xdoc = m_xdoc; List list = (from xAccount in xdoc.Descendants("userItem") where xAccount.Attribute("id").Value == p_newAccount.UserID select xAccount).ToList(); if (list.Count > 0) { list[0].SetAttributeValue("loginname", p_newAccount.LoginName); list[0].SetAttributeValue("password", Encrypt(p_newAccount.Password)); list[0].SetAttributeValue("firstname", p_newAccount.FirstName); list[0].SetAttributeValue("lastname", p_newAccount.LastName); list[0].SetAttributeValue("email", p_newAccount.Email); list[0].SetAttributeValue("description", p_newAccount.Description); list[0].Element("rolegroup").RemoveAll(); foreach (string roleID in p_newAccount.RoleIDs) { list[0].Element("rolegroup").Add(new XElement("role", new XAttribute("id", roleID))); } } else { XElement xElement = new XElement("userItem", new XAttribute("id", p_newAccount.UserID), new XAttribute("loginname", p_newAccount.LoginName), new XAttribute("password", Encrypt(p_newAccount.Password)), new XAttribute("firstname", p_newAccount.FirstName), new XAttribute("lastname", p_newAccount.LastName), new XAttribute("email", p_newAccount.Email), new XAttribute("description", p_newAccount.Description), new XElement("rolegroup")); foreach (string roleID2 in p_newAccount.RoleIDs) { xElement.Element("rolegroup").Add(new XElement("role", new XAttribute("id", roleID2))); } xdoc.Root.Element("users").Add(xElement); } xdoc.Save(m_strPath); return true; } public bool DeleteAccount(string p_strUserID) { AccountEx accountEx = m_accountlist.Find((AccountEx item) => item.UserID == p_strUserID); if (accountEx != null) { m_accountlist.Remove(accountEx); XDocument xdoc = m_xdoc; List list = (from xAccount in xdoc.Descendants("userItem") where xAccount.Attribute("id").Value == p_strUserID select xAccount).ToList(); if (list.Count > 0) { list[0].Remove(); xdoc.Save(m_strPath); return true; } return false; } return false; } public string Encrypt(string encrytStr) { if (string.IsNullOrWhiteSpace(encrytStr)) { return string.Empty; } try { byte[] bytes = Encoding.UTF8.GetBytes(encrytStr); return Convert.ToBase64String(bytes); } catch { return encrytStr; } } public string Decrypt(string decryptStr) { if (string.IsNullOrWhiteSpace(decryptStr)) { return string.Empty; } try { byte[] bytes = Convert.FromBase64String(decryptStr); return Encoding.UTF8.GetString(bytes); } catch { return decryptStr; } } } }