public void GrantUserPermissions(int userId, Permissions permission) { if (userId == 0) { throw new KMBitException(""); } List <Admin_Actions> actions = new List <Admin_Actions>(); using (chargebitEntities db = new chargebitEntities()) { List <Admin_Actions> allActions = (from ac in db.Admin_Actions select ac).ToList <Admin_Actions>(); PropertyInfo[] props = permission.GetType().GetProperties(); foreach (PropertyInfo prop in props) { bool hasPermission = (bool)prop.GetValue(permission); if (hasPermission) { Admin_Actions ac = (from acc in allActions where acc.Name == prop.Name select acc).FirstOrDefault <Admin_Actions>(); if (ac != null) { actions.Add(ac); } } } } GrantUserPermissions(userId, actions); }
/// <summary> /// Gets single user permissions object /// </summary> /// <param name="userId">User Id of user</param> /// <returns>Instance of Permissions object</returns> public static Permissions GetUserPermissions(int userId) { Permissions permissions = new Permissions(); PropertyInfo[] fields = permissions.GetType().GetProperties(); KMBit.DAL.chargebitEntities db = null; try { db = new chargebitEntities(); Admin_Users au = (from u in db.Admin_Users where u.User_Id == userId select u).FirstOrDefault <Admin_Users>(); if (au != null && au.IsSuperAdmin) { foreach (PropertyInfo f in fields) { f.SetValue(permissions, true); } return(permissions); } List <Admin_Actions> actions = (from a in db.Admin_Actions select a).ToList <Admin_Actions>(); List <Admin_Users_Actions> userActions = (from ua in db.Admin_Users_Actions where ua.User_Id == userId select ua).ToList <Admin_Users_Actions>(); if (userActions != null && userActions.Count > 0) { foreach (Admin_Users_Actions ua in userActions) { Admin_Actions action = (from a in actions where a.Id == ua.Action_Id select a).FirstOrDefault <Admin_Actions>(); if (action != null) { foreach (PropertyInfo f in fields) { if (f.Name == action.Name || au.IsSuperAdmin) { f.SetValue(permissions, true); } } } } } } catch { } finally { if (db != null) { db.Dispose(); } } return(permissions); }
/// <summary> /// Sync database user permission actions with the definitions of Permissions object /// </summary> public void SyncPermissionsWithDB() { if (logger == null) { logger = log4net.LogManager.GetLogger(typeof(PermissionManagement)); } KMBit.DAL.chargebitEntities db = null; try { db = new chargebitEntities(); db.Configuration.AutoDetectChangesEnabled = false; List <AdminActionAttribute> cates = new List <AdminActionAttribute>(); List <Admin_Actions> allActions = (from action in db.Admin_Actions select action).ToList <Admin_Actions>(); List <Admin_Categories> allCates = (from cate in db.Admin_Categories select cate).ToList <Admin_Categories>(); Type permission = typeof(Permissions); PropertyInfo[] fields = permission.GetProperties(); if (fields == null || fields.Length <= 0) { return; } foreach (PropertyInfo field in fields) { AdminActionAttribute attr = field.GetCustomAttribute <AdminActionAttribute>(); if (attr != null) { Admin_Actions action = (from a in allActions where a.Name == field.Name select a).FirstOrDefault <Admin_Actions>(); if (action == null) { action = new Admin_Actions(); action.Name = field.Name; action.Enabled = true; db.Admin_Actions.Add(action); } action.Category = attr.ID; action.Description = attr.ActionDescription; List <Admin_Categories> categories = (from cate in allCates where cate.Id == attr.ID select cate).ToList <Admin_Categories>(); if (categories == null || categories.Count == 0) { Admin_Categories newCate = new Admin_Categories() { Id = attr.ID, Name = attr.CategoryName }; db.Admin_Categories.Add(newCate); allCates.Add(newCate); } } } db.SaveChanges(); } catch (Exception ex) { logger.Fatal(ex); } finally { if (db != null) { db.Dispose(); } } }