public void AssignUserToOrganization(OrganizationUserRoleUpdateModel updateModel) { var organizationId = updateModel.OrganizationId; foreach (var user in updateModel.Users) { var oldRoles = this.GetQueryable().Where(x => x.OrganizationId == organizationId && x.UserId == user.UserId); var rolesToDelete = oldRoles.Where(x => !user.OrganizationRoleIds.Any(c => c == x.RoleId)); var rolesToInsert = user.OrganizationRoleIds.Where(x => !oldRoles.Any(c => c.RoleId == x)); foreach (var roleId in rolesToInsert) { Insert(new OrganizationUser() { OrganizationId = organizationId, UserId = user.UserId, RoleId = roleId }); } foreach (var roleId in rolesToDelete) { Delete(roleId.ID); } SaveChanges(); } }
public OperationResult <UserModel> CreateUser(CreateUserModel createUserModel) { var result = ValidateUserData(createUserModel); if (!result.IsSuccess) { return(result); } var userEntity = createUserModel.ToEntity(); var newUser = _userRepository.Insert(userEntity); _userRepository.SaveChanges(); _userRoleRepository.AssignRolesToUser(newUser.ID, new List <int>() { createUserModel.RoleId }); var newUserModel = newUser.ToModel(); _userRoleRepository.FetchRoles(newUserModel); if (createUserModel.OrganizationId != null) { var organizationId = createUserModel.OrganizationId.Value; var organizationRoleUpdateModel = new OrganizationUserRoleUpdateModel() { OrganizationId = organizationId, Users = new List <OrganizationUserUpdateModel>() { new OrganizationUserUpdateModel() { UserId = newUserModel.ID, OrganizationRoleIds = createUserModel.OrganizationRoleIds } } }; _organizationUserRepository.AssignUserToOrganization(organizationRoleUpdateModel); } result.Data = newUserModel; return(result); }