1
0
mirror of https://github.com/bitwarden/server synced 2025-12-25 04:33:26 +00:00

[PM-22104] Migrate default collection when org user is removed (#6135)

* migrate default collection to a shared collection when users are removed

* remove redundant logic

* fix test

* fix tests

* fix test

* clean up

* add migrations

* run dotnet format

* clean up, refactor duplicate logic to sproc, wip integration test

* fix sql

* add migration for new sproc

* integration test wip

* integration test wip

* integration test wip

* integration test wip

* fix integration test LINQ expression

* fix using wrong Id

* wip integration test for DeleteManyAsync

* fix LINQ

* only set DefaultUserEmail when it is null in sproc

* check for null

* spelling, separate create and update request models

* fix test

* fix child class

* refactor sproc

* clean up

* more cleanup

* fix tests

* fix user email

* remove unneccesary test

* add DefaultUserCollectionEmail to EF query

* fix test

* fix EF logic to match sprocs

* clean up logic

* cleanup
This commit is contained in:
Brandon Treston
2025-08-19 14:12:34 -04:00
committed by GitHub
parent 29d6288b27
commit c189e4aaf5
16 changed files with 1001 additions and 195 deletions

View File

@@ -1,4 +1,4 @@
CREATE PROCEDURE [dbo].[OrganizationUser_DeleteById]
CREATE PROCEDURE [dbo].[OrganizationUser_DeleteById]
@Id UNIQUEIDENTIFIER
AS
BEGIN
@@ -17,6 +17,11 @@ BEGIN
WHERE
[Id] = @Id
-- Migrate DefaultUserCollection to SharedCollection
DECLARE @Ids [dbo].[GuidIdArray]
INSERT INTO @Ids (Id) VALUES (@Id)
EXEC [dbo].[OrganizationUser_MigrateDefaultCollection] @Ids
IF @OrganizationId IS NOT NULL AND @UserId IS NOT NULL
BEGIN
EXEC [dbo].[SsoUser_Delete] @UserId, @OrganizationId

View File

@@ -6,6 +6,9 @@ BEGIN
EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationUserIds] @Ids
-- Migrate DefaultCollection to SharedCollection
EXEC [dbo].[OrganizationUser_MigrateDefaultCollection] @Ids
DECLARE @UserAndOrganizationIds [dbo].[TwoGuidIdArray]
INSERT INTO @UserAndOrganizationIds

View File

@@ -0,0 +1,22 @@
CREATE PROCEDURE [dbo].[OrganizationUser_MigrateDefaultCollection]
@Ids [dbo].[GuidIdArray] READONLY
AS
BEGIN
SET NOCOUNT ON
DECLARE @UtcNow DATETIME2(7) = GETUTCDATE();
UPDATE c
SET
[DefaultUserCollectionEmail] = CASE WHEN c.[DefaultUserCollectionEmail] IS NULL THEN u.[Email] ELSE c.[DefaultUserCollectionEmail] END,
[RevisionDate] = @UtcNow,
[Type] = 0
FROM
[dbo].[Collection] c
INNER JOIN [dbo].[CollectionUser] cu ON c.[Id] = cu.[CollectionId]
INNER JOIN [dbo].[OrganizationUser] ou ON cu.[OrganizationUserId] = ou.[Id]
INNER JOIN [dbo].[User] u ON ou.[UserId] = u.[Id]
INNER JOIN @Ids i ON ou.[Id] = i.[Id]
WHERE
c.[Type] = 1
END
GO