protected override IList <RoleUserGroup> ExecuteWorkImplementation() { var subwork = new UserGroupSubwork(m_userRepository); var result = subwork.UpdateAndGetUserGroups(m_authRoles); if (m_userId != null) { // Update assigned RoleUserGroups for user var user = m_userRepository.GetUserById(m_userId.Value); var nonRoleGroups = user.Groups.Where(x => !(x is RoleUserGroup)); var newUserGroups = new List <UserGroup>(); newUserGroups.AddRange(nonRoleGroups); newUserGroups.AddRange(result); user.Groups = newUserGroups; } return(result); }
protected override int ExecuteWorkImplementation() { var userFavoriteLabelSubwork = new UserFavoriteLabelSubwork(m_userRepository); IList <RoleUserGroup> dbRoleUserGroups = null; var now = DateTime.UtcNow; if (m_roles != null) { var userGroupSubwork = new UserGroupSubwork(m_userRepository); dbRoleUserGroups = userGroupSubwork.UpdateAndGetUserGroups(m_roles); } var user = m_userRepository.GetUserByExternalId(m_userExternalId); if (user != null) { // Update user data if (m_userInfo.Username != null) // Username is not always returned { user.ExtUsername = m_userInfo.Username; } user.ExtFirstName = m_userInfo.FirstName; user.ExtLastName = m_userInfo.LastName; // Update RoleUserGroups if (dbRoleUserGroups != null) { // User already exists, so only update groups var originalGroups = user.Groups; var nonRoleGroups = originalGroups.Where(x => !(x is RoleUserGroup)); var newGroups = new List <UserGroup>(dbRoleUserGroups); newGroups.AddRange(nonRoleGroups); user.Groups = newGroups; } // Add SingleUserGroup if (user.Groups.OfType <SingleUserGroup>().Any() == false) { user.Groups.Add(CreateSingleUserGroupObject(user, now)); } m_userRepository.Update(user); userFavoriteLabelSubwork.CreateOrUpdateDefaultFavoriteLabel(user.Id); return(user.Id); } var dbUser = new User { ExternalId = m_userExternalId, CreateTime = now, Groups = dbRoleUserGroups?.Cast <UserGroup>().ToList() ?? new List <UserGroup>(), ExtUsername = m_userInfo.Username, ExtFirstName = m_userInfo.FirstName, ExtLastName = m_userInfo.LastName, FavoriteLabels = null, }; var newSingleUserGroup = CreateSingleUserGroupObject(dbUser, now); dbUser.Groups.Add(newSingleUserGroup); var defaultFavoriteLabel = userFavoriteLabelSubwork.GetNewDefaultFavoriteLabel(dbUser); dbUser.FavoriteLabels = new List <FavoriteLabel> { defaultFavoriteLabel }; var userId = (int)m_userRepository.Create(dbUser); return(userId); }