mirror of
https://github.com/bitwarden/server
synced 2026-01-27 06:43:19 +00:00
feat: add DeleteMany procedure for EmergencyAccess
This commit is contained in:
@@ -30,4 +30,11 @@ public interface IEmergencyAccessRepository : IRepository<EmergencyAccess, Guid>
|
||||
/// <param name="emergencyAccessKeys">A list of emergency access with updated keys</param>
|
||||
UpdateEncryptedDataForKeyRotation UpdateForKeyRotation(Guid grantorId,
|
||||
IEnumerable<EmergencyAccess> emergencyAccessKeys);
|
||||
|
||||
/// <summary>
|
||||
/// Deletes multiple emergency access records by their IDs
|
||||
/// </summary>
|
||||
/// <param name="emergencyAccessIds">Ids of records to be deleted</param>
|
||||
/// <returns>void</returns>
|
||||
Task DeleteManyAsync(ICollection<Guid> emergencyAccessIds);
|
||||
}
|
||||
|
||||
@@ -9,8 +9,6 @@ using Bit.Infrastructure.Dapper.Repositories;
|
||||
using Dapper;
|
||||
using Microsoft.Data.SqlClient;
|
||||
|
||||
#nullable enable
|
||||
|
||||
namespace Bit.Infrastructure.Dapper.Auth.Repositories;
|
||||
|
||||
public class EmergencyAccessRepository : Repository<EmergencyAccess, Guid>, IEmergencyAccessRepository
|
||||
@@ -152,4 +150,14 @@ public class EmergencyAccessRepository : Repository<EmergencyAccess, Guid>, IEme
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task DeleteManyAsync(ICollection<Guid> emergencyAccessIds)
|
||||
{
|
||||
using var connection = new SqlConnection(ConnectionString);
|
||||
await connection.ExecuteAsync(
|
||||
"[dbo].[EmergencyAccess_DeleteMany]",
|
||||
new { EmergencyAccessIds = emergencyAccessIds },
|
||||
commandType: CommandType.StoredProcedure);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -144,4 +144,19 @@ public class EmergencyAccessRepository : Repository<Core.Auth.Entities.Emergency
|
||||
};
|
||||
}
|
||||
|
||||
/// <inheritdoc />
|
||||
public async Task DeleteManyAsync(ICollection<Guid> emergencyAccessIds)
|
||||
{
|
||||
using (var scope = ServiceScopeFactory.CreateScope())
|
||||
{
|
||||
var dbContext = GetDatabaseContext(scope);
|
||||
var rangeToRemove = from ea in dbContext.EmergencyAccesses
|
||||
where emergencyAccessIds.Contains(ea.Id)
|
||||
select ea;
|
||||
dbContext.EmergencyAccesses.RemoveRange(rangeToRemove);
|
||||
|
||||
await dbContext.SaveChangesAsync();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
CREATE PROCEDURE [dbo].[EmergencyAccess_DeleteManyById]
|
||||
@EmergencyAccessIds [dbo].[GuidIdArray] READONLY
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
DECLARE @BatchSize INT = 100
|
||||
|
||||
-- Delete EmergencyAccess Records
|
||||
WHILE @BatchSize > 0
|
||||
BEGIN
|
||||
BEGIN TRANSACTION
|
||||
|
||||
DELETE TOP(@BatchSize) EA
|
||||
FROM
|
||||
[dbo].[EmergencyAccess] EA
|
||||
INNER JOIN
|
||||
@EmergencyAccessIds EAI ON EAI.Id = EA.Id
|
||||
|
||||
SET @BatchSize = @@ROWCOUNT
|
||||
|
||||
COMMIT TRANSACTION
|
||||
END
|
||||
END
|
||||
GO
|
||||
@@ -0,0 +1,25 @@
|
||||
CREATE OR ALTER PROCEDURE [dbo].[EmergencyAccess_DeleteManyById]
|
||||
@EmergencyAccessIds [dbo].[GuidIdArray] READONLY
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON
|
||||
|
||||
DECLARE @BatchSize INT = 100
|
||||
|
||||
-- Delete EmergencyAccess Records
|
||||
WHILE @BatchSize > 0
|
||||
BEGIN
|
||||
BEGIN TRANSACTION
|
||||
|
||||
DELETE TOP(@BatchSize) EA
|
||||
FROM
|
||||
[dbo].[EmergencyAccess] EA
|
||||
INNER JOIN
|
||||
@EmergencyAccessIds EAI ON EAI.Id = EA.Id
|
||||
|
||||
SET @BatchSize = @@ROWCOUNT
|
||||
|
||||
COMMIT TRANSACTION
|
||||
END
|
||||
END
|
||||
GO
|
||||
Reference in New Issue
Block a user