/// <summary> /// Gets the full access. /// </summary> /// <returns>AdminPrivileges with full access.</returns> private static AdminPrivileges GetFullAccess() { AdminPrivileges privileges = new AdminPrivileges(); foreach (FieldInfo fi in typeof(AdminPrivileges).GetFields()) { if (fi.FieldType == typeof(eAccess)) fi.SetValue(privileges, eAccess.Read | eAccess.Write); } return privileges; }
/// <summary> /// Gets the raw data from privileges. /// </summary> /// <param name="privileges">The privileges.</param> /// <returns></returns> public static RawAdminPrivileges GetRawDataFromPrivileges(AdminPrivileges privileges) { RawAdminPrivileges rawdata = new RawAdminPrivileges(); FieldInfo[] fis = privileges.GetType().GetFields(); foreach (FieldInfo fi in fis) { if (fi.FieldType == typeof(eAccess)) { Reflection.DescriptionAttribute att = Attribute.GetCustomAttribute(fi, typeof(Reflection.DescriptionAttribute)) as Reflection.DescriptionAttribute; eAccess access = (eAccess)fi.GetValue(privileges); if (att != null) { rawdata.lSections.Add(att.Description); rawdata.lReadPermissions.Add((access & eAccess.Read) == eAccess.Read); rawdata.lWritePermissions.Add((access & eAccess.Write) == eAccess.Write); } else continue; } } return rawdata; }
/// <summary> /// Gets the privileges from raw data. /// </summary> /// <param name="rawdata">The rawdata.</param> /// <returns></returns> public static AdminPrivileges GetPrivilegesFromRawData(RawAdminPrivileges rawdata) { AdminPrivileges privileges = new AdminPrivileges(); for (int i = 0; i < rawdata.lSections.Count; ++i) { foreach (FieldInfo fi in typeof(AdminPrivileges).GetFields()) { Reflection.DescriptionAttribute att = Attribute.GetCustomAttribute(fi, typeof(Reflection.DescriptionAttribute)) as Reflection.DescriptionAttribute; if (att != null && att.Description == rawdata.lSections[i]) { eAccess readAccess = rawdata.lReadPermissions[i] ? eAccess.Read : eAccess.None; eAccess writeAccess = rawdata.lWritePermissions[i] ? eAccess.Write : eAccess.None; fi.SetValue(privileges, readAccess | writeAccess); break; } } } return privileges; }
/// <summary> /// Loads admin account data from DB. /// </summary> /// <exception cref="NotFoundException">The specified account does not exist.</exception> public void Load() { using (SqlConnection conn = Config.DB.Open()) { SqlDataReader reader = SqlHelper.ExecuteReader(conn, "LoadAdmin", username); if (reader.Read()) { username = (string)reader["Username"]; password = (string)reader["Password"]; lastSessionID = (string)reader["LastSessionID"]; lastlogin = (DateTime)reader["LastLogin"]; try { if (username == Config.Users.SystemUsername) { privileges = GetFullAccess(); } else privileges = Misc.FromXml<AdminPrivileges>((string)reader["Privileges"]); } catch { //no privileges found ... default will be used instead } } else { throw new NotFoundException (Lang.Trans("The specified account does not exist!")); } } }