CREATE OR ALTER PROCEDURE [dbo].[Collection_ReadByOrganizationIdWithPermissions] @OrganizationId UNIQUEIDENTIFIER, @UserId UNIQUEIDENTIFIER, @IncludeAccessRelationships BIT AS BEGIN SET NOCOUNT ON SELECT C.*, MIN(CASE WHEN COALESCE(CU.[ReadOnly], CG.[ReadOnly], 0) = 0 THEN 0 ELSE 1 END) AS [ReadOnly], MIN(CASE WHEN COALESCE(CU.[HidePasswords], CG.[HidePasswords], 0) = 0 THEN 0 ELSE 1 END) AS [HidePasswords], MAX(CASE WHEN COALESCE(CU.[Manage], CG.[Manage], 0) = 0 THEN 0 ELSE 1 END) AS [Manage], MAX(CASE WHEN CU.[CollectionId] IS NULL AND CG.[CollectionId] IS NULL THEN 0 ELSE 1 END) AS [Assigned], CASE WHEN -- No user or group has manage rights NOT EXISTS( SELECT 1 FROM [dbo].[CollectionUser] CU2 JOIN [dbo].[OrganizationUser] OU2 ON CU2.[OrganizationUserId] = OU2.[Id] WHERE CU2.[CollectionId] = C.[Id] AND CU2.[Manage] = 1 ) AND NOT EXISTS ( SELECT 1 FROM [dbo].[CollectionGroup] CG2 WHERE CG2.[CollectionId] = C.[Id] AND CG2.[Manage] = 1 ) THEN 1 ELSE 0 END AS [Unmanaged] FROM [dbo].[CollectionView] C LEFT JOIN [dbo].[OrganizationUser] OU ON C.[OrganizationId] = OU.[OrganizationId] AND OU.[UserId] = @UserId LEFT JOIN [dbo].[CollectionUser] CU ON CU.[CollectionId] = C.[Id] AND CU.[OrganizationUserId] = [OU].[Id] LEFT JOIN [dbo].[GroupUser] GU ON CU.[CollectionId] IS NULL AND GU.[OrganizationUserId] = OU.[Id] LEFT JOIN [dbo].[Group] G ON G.[Id] = GU.[GroupId] LEFT JOIN [dbo].[CollectionGroup] CG ON CG.[CollectionId] = C.[Id] AND CG.[GroupId] = GU.[GroupId] WHERE C.[OrganizationId] = @OrganizationId GROUP BY C.[Id], C.[OrganizationId], C.[Name], C.[CreationDate], C.[RevisionDate], C.[ExternalId] IF (@IncludeAccessRelationships = 1) BEGIN EXEC [dbo].[CollectionGroup_ReadByOrganizationId] @OrganizationId EXEC [dbo].[CollectionUser_ReadByOrganizationId] @OrganizationId END END GO CREATE OR ALTER PROCEDURE [dbo].[Collection_ReadByIdWithPermissions] @CollectionId UNIQUEIDENTIFIER, @UserId UNIQUEIDENTIFIER, @IncludeAccessRelationships BIT AS BEGIN SET NOCOUNT ON SELECT C.*, MIN(CASE WHEN COALESCE(CU.[ReadOnly], CG.[ReadOnly], 0) = 0 THEN 0 ELSE 1 END) AS [ReadOnly], MIN (CASE WHEN COALESCE(CU.[HidePasswords], CG.[HidePasswords], 0) = 0 THEN 0 ELSE 1 END) AS [HidePasswords], MAX(CASE WHEN COALESCE(CU.[Manage], CG.[Manage], 0) = 0 THEN 0 ELSE 1 END) AS [Manage], MAX(CASE WHEN CU.[CollectionId] IS NULL AND CG.[CollectionId] IS NULL THEN 0 ELSE 1 END) AS [Assigned], CASE WHEN -- No user or group has manage rights NOT EXISTS( SELECT 1 FROM [dbo].[CollectionUser] CU2 JOIN [dbo].[OrganizationUser] OU2 ON CU2.[OrganizationUserId] = OU2.[Id] WHERE CU2.[CollectionId] = C.[Id] AND CU2.[Manage] = 1 ) AND NOT EXISTS ( SELECT 1 FROM [dbo].[CollectionGroup] CG2 WHERE CG2.[CollectionId] = C.[Id] AND CG2.[Manage] = 1 ) THEN 1 ELSE 0 END AS [Unmanaged] FROM [dbo].[CollectionView] C LEFT JOIN [dbo].[OrganizationUser] OU ON C.[OrganizationId] = OU.[OrganizationId] AND OU.[UserId] = @UserId LEFT JOIN [dbo].[CollectionUser] CU ON CU.[CollectionId] = C.[Id] AND CU.[OrganizationUserId] = [OU].[Id] LEFT JOIN [dbo].[GroupUser] GU ON CU.[CollectionId] IS NULL AND GU.[OrganizationUserId] = OU.[Id] LEFT JOIN [dbo].[Group] G ON G.[Id] = GU.[GroupId] LEFT JOIN [dbo].[CollectionGroup] CG ON CG.[CollectionId] = C.[Id] AND CG.[GroupId] = GU.[GroupId] WHERE C.[Id] = @CollectionId GROUP BY C.[Id], C.[OrganizationId], C.[Name], C.[CreationDate], C.[RevisionDate], C.[ExternalId] IF (@IncludeAccessRelationships = 1) BEGIN EXEC [dbo].[CollectionGroup_ReadByCollectionId] @CollectionId EXEC [dbo].[CollectionUser_ReadByCollectionId] @CollectionId END END GO