/// <inheritdoc /> public async Task ModifyClaimMappingAsync(ulong roleId, AuthorizationClaim claim, ClaimMappingType?newType) { RequireClaims(AuthorizationClaim.AuthorizationConfigure); var foundClaims = await ClaimMappingRepository.SearchBriefsAsync(new ClaimMappingSearchCriteria { Claims = new[] { claim }, RoleIds = new[] { roleId }, GuildId = CurrentGuildId }); using (var createTransaction = await ClaimMappingRepository.BeginCreateTransactionAsync()) using (var deleteTransaction = await ClaimMappingRepository.BeginDeleteTransactionAsync()) { foreach (var existing in foundClaims) { await ClaimMappingRepository.TryDeleteAsync(existing.Id, CurrentUserId.Value); } if (newType.HasValue) { await ClaimMappingRepository.CreateAsync(new ClaimMappingCreationData() { GuildId = CurrentGuildId.Value, Type = newType.Value, RoleId = roleId, Claim = claim, CreatedById = CurrentUserId.Value }); } createTransaction.Commit(); deleteTransaction.Commit(); } }
/// <inheritdoc /> public async Task RemoveClaimMappingAsync(IGuildUser user, ClaimMappingType type, AuthorizationClaim claim) { RequireClaims(AuthorizationClaim.AuthorizationConfigure); using (var transaction = await ClaimMappingRepository.BeginDeleteTransactionAsync()) { var mappingIds = await ClaimMappingRepository.SearchIdsAsync(new ClaimMappingSearchCriteria() { Types = new[] { type }, GuildId = user.Guild.Id, UserId = user.Id, Claims = new[] { claim }, IsDeleted = false, }); if (!mappingIds.Any()) { throw new InvalidOperationException($"A claim mapping of type {type} to claim {claim} for user {user.GetDisplayName()} does not exist"); } await ClaimMappingRepository.TryDeleteAsync(mappingIds.First(), CurrentUserId.Value); transaction.Commit(); } }
/// <inheritdoc /> public async Task UnConfigureGuildAsync(IGuild guild) { using (var deleteTransaction = await ClaimMappingRepository.BeginDeleteTransactionAsync()) { foreach (var claimMappingId in await ClaimMappingRepository.SearchIdsAsync(new ClaimMappingSearchCriteria() { GuildId = guild.Id, IsDeleted = false })) { await ClaimMappingRepository.TryDeleteAsync(claimMappingId, DiscordClient.CurrentUser.Id); } } }