From 9b10d9515ed8ee6b08e3a63f5172ccb9f960fd0b Mon Sep 17 00:00:00 2001 From: jaasen-livefront Date: Tue, 10 Jun 2025 15:38:12 -0700 Subject: [PATCH] fix migration --- .../SecurityTask_ReadByUserIdStatus.sql | 113 +++++++----------- .../2025-06-09_00_ImproveSecurityTask.sql | 113 +++++++++++------- 2 files changed, 113 insertions(+), 113 deletions(-) diff --git a/src/Sql/dbo/Vault/Stored Procedures/SecurityTask/SecurityTask_ReadByUserIdStatus.sql b/src/Sql/dbo/Vault/Stored Procedures/SecurityTask/SecurityTask_ReadByUserIdStatus.sql index 3697a7367c..2695135a4f 100644 --- a/src/Sql/dbo/Vault/Stored Procedures/SecurityTask/SecurityTask_ReadByUserIdStatus.sql +++ b/src/Sql/dbo/Vault/Stored Procedures/SecurityTask/SecurityTask_ReadByUserIdStatus.sql @@ -3,70 +3,8 @@ CREATE PROCEDURE [dbo].[SecurityTask_ReadByUserIdStatus] @Status TINYINT = NULL AS BEGIN - SET NOCOUNT ON; + SET NOCOUNT ON - WITH OrganizationAccess AS ( - SELECT - OU.OrganizationId - FROM - dbo.OrganizationUser OU - WHERE - OU.UserId = @UserId - AND OU.Status = 2 - ), - UserCollectionAccess AS ( - SELECT - CC.CipherId - FROM - dbo.OrganizationUser OU - JOIN dbo.CollectionUser CU - ON CU.OrganizationUserId = OU.Id - JOIN dbo.CollectionCipher CC - ON CC.CollectionId = CU.CollectionId - WHERE - OU.UserId = @UserId - AND OU.Status = 2 - AND CU.ReadOnly = 0 - ), - GroupCollectionAccess AS ( - SELECT - CC.CipherId - FROM - dbo.OrganizationUser OU - JOIN dbo.GroupUser GU - ON GU.OrganizationUserId = OU.Id - JOIN dbo.CollectionGroup CG - ON CG.GroupId = GU.GroupId - JOIN dbo.CollectionCipher CC - ON CC.CollectionId = CG.CollectionId - WHERE - OU.UserId = @UserId - AND OU.Status = 2 - AND CG.ReadOnly = 0 - ), - AccessibleCiphers AS ( - SELECT CipherId - FROM UserCollectionAccess - - UNION ALL - - SELECT GC.CipherId - FROM GroupCollectionAccess AS GC - WHERE NOT EXISTS ( - SELECT 1 - FROM UserCollectionAccess AS UA - WHERE UA.CipherId = GC.CipherId - ) - ), - SecurityTasks AS ( - SELECT - ST.* - FROM - dbo.SecurityTask ST - WHERE - @Status IS NULL - OR ST.Status = @Status - ) SELECT ST.Id, ST.OrganizationId, @@ -76,14 +14,43 @@ BEGIN ST.CreationDate, ST.RevisionDate FROM - SecurityTasks ST - JOIN OrganizationAccess OA - ON ST.OrganizationId = OA.OrganizationId - LEFT JOIN AccessibleCiphers AC - ON ST.CipherId = AC.CipherId + [dbo].[SecurityTaskView] ST + INNER JOIN + [dbo].[OrganizationUserView] OU ON OU.[OrganizationId] = ST.[OrganizationId] + INNER JOIN + [dbo].[Organization] O ON O.[Id] = ST.[OrganizationId] + LEFT JOIN + [dbo].[CipherView] C ON C.[Id] = ST.[CipherId] + LEFT JOIN + [dbo].[CollectionCipher] CC ON CC.[CipherId] = C.[Id] AND C.[Id] IS NOT NULL + LEFT JOIN + [dbo].[CollectionUser] CU ON CU.[CollectionId] = CC.[CollectionId] AND CU.[OrganizationUserId] = OU.[Id] AND C.[Id] IS NOT NULL + LEFT JOIN + [dbo].[GroupUser] GU ON GU.[OrganizationUserId] = OU.[Id] AND CU.[CollectionId] IS NULL AND C.[Id] IS NOT NULL + LEFT JOIN + [dbo].[CollectionGroup] CG ON CG.[GroupId] = GU.[GroupId] AND CG.[CollectionId] = CC.[CollectionId] WHERE - ST.CipherId IS NULL - OR AC.CipherId IS NOT NULL - ORDER BY - ST.CreationDate DESC; -END + OU.[UserId] = @UserId + AND OU.[Status] = 2 -- Ensure user is confirmed + AND O.[Enabled] = 1 + AND ( + ST.[CipherId] IS NULL + OR ( + C.[Id] IS NOT NULL + AND ( + CU.[ReadOnly] = 0 + OR CG.[ReadOnly] = 0 + ) + ) + ) + AND ST.[Status] = COALESCE(@Status, ST.[Status]) + GROUP BY + ST.Id, + ST.OrganizationId, + ST.CipherId, + ST.Type, + ST.Status, + ST.CreationDate, + ST.RevisionDate + ORDER BY ST.[CreationDate] DESC +END \ No newline at end of file diff --git a/util/Migrator/DbScripts/2025-06-09_00_ImproveSecurityTask.sql b/util/Migrator/DbScripts/2025-06-09_00_ImproveSecurityTask.sql index 5a0a9c4707..4cd16a3e32 100644 --- a/util/Migrator/DbScripts/2025-06-09_00_ImproveSecurityTask.sql +++ b/util/Migrator/DbScripts/2025-06-09_00_ImproveSecurityTask.sql @@ -1,10 +1,72 @@ -CREATE OR ALTER PROCEDURE [dbo].[SecurityTask_ReadByUserIdStatus] +ALTER PROCEDURE [dbo].[SecurityTask_ReadByUserIdStatus] @UserId UNIQUEIDENTIFIER, @Status TINYINT = NULL AS BEGIN - SET NOCOUNT ON + SET NOCOUNT ON; + WITH OrganizationAccess AS ( + SELECT + OU.OrganizationId + FROM + dbo.OrganizationUser OU + WHERE + OU.UserId = @UserId + AND OU.Status = 2 + ), + UserCollectionAccess AS ( + SELECT + CC.CipherId + FROM + dbo.OrganizationUser OU + JOIN dbo.CollectionUser CU + ON CU.OrganizationUserId = OU.Id + JOIN dbo.CollectionCipher CC + ON CC.CollectionId = CU.CollectionId + WHERE + OU.UserId = @UserId + AND OU.Status = 2 + AND CU.ReadOnly = 0 + ), + GroupCollectionAccess AS ( + SELECT + CC.CipherId + FROM + dbo.OrganizationUser OU + JOIN dbo.GroupUser GU + ON GU.OrganizationUserId = OU.Id + JOIN dbo.CollectionGroup CG + ON CG.GroupId = GU.GroupId + JOIN dbo.CollectionCipher CC + ON CC.CollectionId = CG.CollectionId + WHERE + OU.UserId = @UserId + AND OU.Status = 2 + AND CG.ReadOnly = 0 + ), + AccessibleCiphers AS ( + SELECT CipherId + FROM UserCollectionAccess + + UNION ALL + + SELECT GC.CipherId + FROM GroupCollectionAccess AS GC + WHERE NOT EXISTS ( + SELECT 1 + FROM UserCollectionAccess AS UA + WHERE UA.CipherId = GC.CipherId + ) + ), + SecurityTasks AS ( + SELECT + ST.* + FROM + dbo.SecurityTask ST + WHERE + @Status IS NULL + OR ST.Status = @Status + ) SELECT ST.Id, ST.OrganizationId, @@ -14,43 +76,14 @@ BEGIN ST.CreationDate, ST.RevisionDate FROM - [dbo].[SecurityTaskView] ST - INNER JOIN - [dbo].[OrganizationUserView] OU ON OU.[OrganizationId] = ST.[OrganizationId] - INNER JOIN - [dbo].[Organization] O ON O.[Id] = ST.[OrganizationId] - LEFT JOIN - [dbo].[CipherView] C ON C.[Id] = ST.[CipherId] - LEFT JOIN - [dbo].[CollectionCipher] CC ON CC.[CipherId] = C.[Id] AND C.[Id] IS NOT NULL - LEFT JOIN - [dbo].[CollectionUser] CU ON CU.[CollectionId] = CC.[CollectionId] AND CU.[OrganizationUserId] = OU.[Id] AND C.[Id] IS NOT NULL - LEFT JOIN - [dbo].[GroupUser] GU ON GU.[OrganizationUserId] = OU.[Id] AND CU.[CollectionId] IS NULL AND C.[Id] IS NOT NULL - LEFT JOIN - [dbo].[CollectionGroup] CG ON CG.[GroupId] = GU.[GroupId] AND CG.[CollectionId] = CC.[CollectionId] + SecurityTasks ST + JOIN OrganizationAccess OA + ON ST.OrganizationId = OA.OrganizationId + LEFT JOIN AccessibleCiphers AC + ON ST.CipherId = AC.CipherId WHERE - OU.[UserId] = @UserId - AND OU.[Status] = 2 -- Ensure user is confirmed - AND O.[Enabled] = 1 - AND ( - ST.[CipherId] IS NULL - OR ( - C.[Id] IS NOT NULL - AND ( - CU.[ReadOnly] = 0 - OR CG.[ReadOnly] = 0 - ) - ) - ) - AND ST.[Status] = COALESCE(@Status, ST.[Status]) - GROUP BY - ST.Id, - ST.OrganizationId, - ST.CipherId, - ST.Type, - ST.Status, - ST.CreationDate, - ST.RevisionDate - ORDER BY ST.[CreationDate] DESC + ST.CipherId IS NULL + OR AC.CipherId IS NOT NULL + ORDER BY + ST.CreationDate DESC; END