mirror of
https://github.com/bitwarden/server.git
synced 2025-06-07 19:50:32 -05:00

* Add HasConfirmedOwnersExceptQuery class, interface and unit tests * Register IHasConfirmedOwnersExceptQuery for dependency injection * Replace OrganizationService.HasConfirmedOwnersExceptAsync with HasConfirmedOwnersExceptQuery * Refactor DeleteManagedOrganizationUserAccountCommand to use IHasConfirmedOwnersExceptQuery * Fix unit tests * Extract IOrganizationService.RemoveUserAsync into IRemoveOrganizationUserCommand; Update unit tests * Extract IOrganizationService.RemoveUsersAsync into IRemoveOrganizationUserCommand; Update unit tests * Refactor RemoveUserAsync(Guid organizationId, Guid userId) to use ValidateDeleteUser * Refactor RemoveOrganizationUserCommandTests to use more descriptive method names * Refactor controller actions to accept Guid directly instead of parsing strings * Add unit tests for removing OrganizationUser by UserId * Refactor remove OrganizationUser by UserId method * Add summary to IHasConfirmedOwnersExceptQuery
42 lines
1.8 KiB
C#
42 lines
1.8 KiB
C#
using Bit.Core.AdminConsole.Enums.Provider;
|
|
using Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers.Interfaces;
|
|
using Bit.Core.AdminConsole.Repositories;
|
|
using Bit.Core.Entities;
|
|
using Bit.Core.Enums;
|
|
using Bit.Core.Repositories;
|
|
|
|
namespace Bit.Core.AdminConsole.OrganizationFeatures.OrganizationUsers;
|
|
|
|
public class HasConfirmedOwnersExceptQuery : IHasConfirmedOwnersExceptQuery
|
|
{
|
|
private readonly IProviderUserRepository _providerUserRepository;
|
|
private readonly IOrganizationUserRepository _organizationUserRepository;
|
|
|
|
public HasConfirmedOwnersExceptQuery(
|
|
IProviderUserRepository providerUserRepository,
|
|
IOrganizationUserRepository organizationUserRepository)
|
|
{
|
|
_providerUserRepository = providerUserRepository;
|
|
_organizationUserRepository = organizationUserRepository;
|
|
}
|
|
|
|
public async Task<bool> HasConfirmedOwnersExceptAsync(Guid organizationId, IEnumerable<Guid> organizationUsersId, bool includeProvider = true)
|
|
{
|
|
var confirmedOwners = await GetConfirmedOwnersAsync(organizationId);
|
|
var confirmedOwnersIds = confirmedOwners.Select(u => u.Id);
|
|
bool hasOtherOwner = confirmedOwnersIds.Except(organizationUsersId).Any();
|
|
if (!hasOtherOwner && includeProvider)
|
|
{
|
|
return (await _providerUserRepository.GetManyByOrganizationAsync(organizationId, ProviderUserStatusType.Confirmed)).Any();
|
|
}
|
|
return hasOtherOwner;
|
|
}
|
|
|
|
private async Task<IEnumerable<OrganizationUser>> GetConfirmedOwnersAsync(Guid organizationId)
|
|
{
|
|
var owners = await _organizationUserRepository.GetManyByOrganizationAsync(organizationId,
|
|
OrganizationUserType.Owner);
|
|
return owners.Where(o => o.Status == OrganizationUserStatusType.Confirmed);
|
|
}
|
|
}
|