public IUser Store(IUser user) { if (!WriteUsersEnabled) { throw new Exception("Storing not enabled"); } var writeable = ResolveWriteableStore(user); if (null == writeable) { throw new Exception("no target source to use as store"); } if (!writeable.WriteUsersEnabled) { throw new Exception("requested storage not enabled"); } var realuser = writeable.Store(user); if (null != _userCache) { _userCache.Clear(); _userCache.Refresh(false); } return(realuser); }
public ICollection <UserGroup> SaveUsers([FromBody] IList <User> users) { var transaction = DbContext.Database.BeginTransaction(); try { foreach (var user in users) { var user2Groups = user.InverseThis2UserGroups; var roles = user.InverseThis2Roles; user.InverseThis2UserGroups = null; user.InverseThis2Roles = null; var existing = DbContext.Users.SingleOrDefault(a => a.ObjId == user.ObjId); if (user.Password != null && user.Password == user.PasswordConfirm) { var salt = UserHelper.GenerateNewSalt(); user.Password = UserHelper.HashPassword(user.Password, salt); user.Salt = salt; user.PasswordConfirm = null; } else if (existing != null) { user.Password = existing.Password; user.Salt = existing.Salt; } if (existing == null) { DbContext.Users.Add(user); } else { DbContext.Entry(existing).State = EntityState.Detached; DbContext.Users.Update(user); } foreach (var user2Group in user2Groups) { var user2GroupExisting = DbContext.User2Groups.SingleOrDefault(a => a.This2User == user2Group.This2User && a.This2UserGroup == user2Group.This2UserGroup); if (user2GroupExisting != null) { continue; } DbContext.User2Groups.Add(user2Group); } if (user.InverseThis2UserGroups != null) { var removedUserGroups = from c in DbContext.User2Groups where !(from o in user.InverseThis2UserGroups select o.This2UserGroup).Contains(c.This2UserGroup) select c; var removedUserGroupsList = removedUserGroups.ToList(); DbContext.RemoveRange(removedUserGroupsList); } foreach (var role in roles) { var rolesExisting = DbContext.User2Roles.SingleOrDefault(a => a.This2User == role.This2User && a.This2Role == role.This2Role); if (rolesExisting != null) { continue; } DbContext.User2Roles.Add(role); } if (user.InverseThis2Roles != null) { var removedUserRoles = from c in DbContext.User2Roles where !(from o in user.InverseThis2Roles select o.This2Role).Contains(c.This2Role) select c; var emovedUserRolesList = removedUserRoles.ToList(); DbContext.RemoveRange(emovedUserRolesList); } } var removedNodes = from c in DbContext.Users where !(from o in users select o.ObjId).Contains(c.ObjId) select c; var removedList = removedNodes.ToList(); DbContext.RemoveRange(removedList); DbContext.SaveChanges(); transaction.Commit(); _userCache.Clear(); } catch (Exception e) { SystemLogger.Instance.LogError(e, "Could not save data"); transaction.Rollback(); } return(GetUserGroups()); }