123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342 |
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Threading.Tasks;
- using System.Xml.Linq;
- namespace MECF.Framework.Common.Account.Extends
- {
-
- public class RoleLoader : XmlLoader
- {
- private List<Role> m_rolelist;
- public List<Role> RoleList
- {
- get { return m_rolelist; }
- set { m_rolelist = value; }
- }
- private List<AccountEx> m_accountlist;
- public List<AccountEx> AccountList
- {
- get { return m_accountlist; }
- set { m_accountlist = value; }
- }
- public RoleLoader(string p_strPath)
- : base(p_strPath)
- {
- }
- /// <summary>
- /// Return all roles except super role
- /// </summary>
- public List<Role> GetRoles()
- {
- return this.m_rolelist.Where(e => { return !e.IsSuper; }).ToList();
- }
- /// <summary>
- /// Return all accounts except super account
- /// </summary>
- public List<AccountEx> GetAccounts()
- {
- return this.m_accountlist.Where(e => { return !e.IsSuper; }).ToList();
- }
- protected override void AnalyzeXml()
- {
- if (this.m_xdoc != null)
- {
- //load roles
- var results = from r in this.m_xdoc.Descendants("roleItem") select r;
- List<Role> rolelist = new List<Role>();
- bool IsAutoLogout = false;
- int nLogoutTime;
- foreach (var result in results)
- {
- string RoleID = result.Attribute("id").Value;
- string RoleName = result.Attribute("name").Value;
- string AutoLogout = result.Attribute("autologout").Value;
- string LogoutTime = result.Attribute("logouttime").Value;
- int.TryParse(LogoutTime, out nLogoutTime);
- IsAutoLogout = AutoLogout == "1" ? true : false;
- string Permissions = result.Value;
- Role roleObject = new Role(RoleID, RoleName, IsAutoLogout, nLogoutTime, Permissions);
- rolelist.Add(roleObject);
- }
- //Create an super role
- Role superRole = new Role("-1", "Administrators", true, 20, null) { IsSuper = true };
- rolelist.Add(superRole);
- this.m_rolelist = rolelist;
- //load users
- results = from r in this.m_xdoc.Descendants("userItem") select r;
- List<AccountEx> accountlist = new List<AccountEx>();
- foreach (var result in results)
- {
- List<string> roleIds = new List<string>();
- string UserID = result.Attribute("id").Value;
- string LoginName = result.Attribute("loginname").Value;
- string Password = Decrypt(result.Attribute("password").Value);
- string FirstName = result.Attribute("firstname").Value;
- string LastName = result.Attribute("lastname").Value;
- string Email = result.Attribute("email").Value;
- var roles = from ro in result.Descendants("role") select ro;
- foreach (var role in roles)
- {
- string strID = role.Attribute("id").Value;
- roleIds.Add(strID);
- }
- AccountEx accountObject = new AccountEx(UserID, LoginName, Password, FirstName, LastName, Email, roleIds);
- accountlist.Add(accountObject);
- }
- AccountEx superAccount = new AccountEx("-1", "admin", "admin", "", "", "", new List<string>() { "-1" }) { IsSuper = true };
- accountlist.Add(superAccount);
- this.m_accountlist = accountlist;
- }
- }
- public bool UpdateRole(Role p_newRole)
- {
- Role m_role = m_rolelist.Find(item => item.RoleID == p_newRole.RoleID);
- if (m_role == null)
- m_rolelist.Add(p_newRole);
- else
- m_rolelist[m_rolelist.IndexOf(m_role)] = p_newRole;
- //save the roles to file
- XDocument xdoc = this.m_xdoc;
- var results = (from m_xRole in xdoc.Descendants("roleItem")
- where m_xRole.Attribute("id").Value == p_newRole.RoleID
- select m_xRole).ToList();
- if (results.Count > 0)
- {
- results[0].Attribute("name").Value = p_newRole.RoleName;
- results[0].Attribute("autologout").Value = p_newRole.IsAutoLogout ? "1" : "0";
- results[0].Attribute("logouttime").Value = p_newRole.LogoutTime.ToString();
- results[0].Value = p_newRole.MenuPermission;
- }
- else
- {
- XElement m_new =
- 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)
- )
- { Value = p_newRole.MenuPermission };
- xdoc.Root.Element("roles").Add(m_new);
- }
- xdoc.Save(this.m_strPath);
- return true;
- }
- public bool DeleteRole(string p_strRoleID)
- {
- this.Load();
- Role m_role = m_rolelist.Find(item => item.RoleID == p_strRoleID);
- if (m_role != null)
- {
- m_rolelist.Remove(m_role);
- //save the roles to file
- XDocument xdoc = this.m_xdoc;
- var results = (from m_xRole in xdoc.Descendants("roleItem")
- where m_xRole.Attribute("id").Value == p_strRoleID
- select m_xRole).ToList();
- if (results.Count > 0)
- {
- results[0].Remove();
- //remove role from account
- foreach (var account in this.m_accountlist)
- {
- if (account.RoleIDs.Contains(m_role.RoleID))
- account.RoleIDs.Remove(m_role.RoleID);
- }
- results = (from m_xRole in xdoc.Descendants("role")
- where m_xRole.Attribute("id").Value == m_role.RoleID
- select m_xRole).ToList();
- if (results.Count > 0)
- results.Remove();
- xdoc.Save(this.m_strPath);
- return true;
- }
- else
- return false;
- }
- else
- return false;
- }
- private List<string> GetRolePermission(string roleid)
- {
- List<string> rolePermissions = new List<string>();
- foreach (Role role in this.m_rolelist)
- {
- if (role.RoleID == roleid)
- {
- rolePermissions = role.MenuPermission.Split(';').ToList();
- break;
- }
- }
- return rolePermissions;
- }
- private int GetMenuPermission(List<string> rolePermissions, string menuid)
- {
- foreach (string menuPermission in rolePermissions)
- {
- if (menuPermission.IndexOf(menuid) >= 0)
- {
- string[] pair = menuPermission.Split(',');
- if (pair.Length > 1 && pair[0].Trim() == menuid) //need check the whole menuid
- return int.Parse(pair[1].Trim());
- }
- }
- return 0;
- }
- public List<AppMenu> GetMenusByRole(string roleid, List<AppMenu> menulist)
- {
- List<AppMenu> menus = new List<AppMenu>();
- List<string> rolePermissions = GetRolePermission(roleid);
- foreach (AppMenu menuItem in menulist)
- {
- List<AppMenu> subMenus = new List<AppMenu>();
- foreach (AppMenu subMenu in menuItem.MenuItems)
- {
- AppMenu RetSubMenu = new AppMenu(subMenu.MenuID, subMenu.ViewModel, subMenu.ResKey, null);
- RetSubMenu.System = subMenu.System;
- RetSubMenu.Permission = this.GetMenuPermission(rolePermissions, subMenu.MenuID);
- if (RetSubMenu.Permission > 1)
- subMenus.Add(RetSubMenu);
- }
- if (subMenus.Count > 0)
- menus.Add(new AppMenu(menuItem.MenuID, menuItem.ViewModel, menuItem.ResKey, subMenus));
- }
- return menus;
- }
- public bool UpdateAccount(AccountEx p_newAccount)
- {
- AccountEx Acc = m_accountlist.Find(item => item.UserID == p_newAccount.UserID);
- if (Acc == null)
- m_accountlist.Add(p_newAccount);
- else
- m_accountlist[m_accountlist.IndexOf(Acc)] = p_newAccount;
- //save the roles to file
- XDocument xdoc = this.m_xdoc;
- var results = (from xAccount in xdoc.Descendants("userItem")
- where xAccount.Attribute("id").Value == p_newAccount.UserID
- select xAccount).ToList();
- if (results.Count > 0)
- {
- results[0].Attribute("loginname").Value = p_newAccount.LoginName;
- results[0].Attribute("password").Value = Encrypt(p_newAccount.Password);
- results[0].Attribute("firstname").Value = p_newAccount.FirstName;
- results[0].Attribute("lastname").Value = p_newAccount.LastName;
- results[0].Attribute("email").Value = p_newAccount.Email;
- results[0].Element("rolegroup").RemoveAll();
- foreach (string strRole in p_newAccount.RoleIDs)
- {
- results[0].Element("rolegroup").Add(new XElement("role", new XAttribute("id", strRole)));
- }
- }
- else
- {
- XElement m_new =
- 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 XElement("rolegroup"));
- foreach (string strRole in p_newAccount.RoleIDs)
- {
- m_new.Element("rolegroup").Add(new XElement("role", new XAttribute("id", strRole)));
- }
- xdoc.Root.Element("users").Add(m_new);
- }
- xdoc.Save(this.m_strPath);
- return true;
- }
- public bool DeleteAccount(string p_strUserID)
- {
- AccountEx Acc = m_accountlist.Find(item => item.UserID == p_strUserID);
- if (Acc != null)
- {
- m_accountlist.Remove(Acc);
- XDocument xdoc = this.m_xdoc;
- var results = (from xAccount in xdoc.Descendants("userItem")
- where xAccount.Attribute("id").Value == p_strUserID
- select xAccount).ToList();
- if (results.Count > 0)
- {
- results[0].Remove();
- xdoc.Save(this.m_strPath);
- return true;
- }
- else
- return false;
- }
- else
- 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;
- }
- }
- }
- }
|