mirror of
https://github.com/bitwarden/server.git
synced 2024-11-28 13:15:12 +01:00
211 lines
5.3 KiB
MySQL
211 lines
5.3 KiB
MySQL
|
-- Stored Procedure: CollectionGroup_ReadByCollectionId
|
||
|
CREATE OR ALTER PROCEDURE [dbo].[CollectionGroup_ReadByCollectionId]
|
||
|
@CollectionId UNIQUEIDENTIFIER
|
||
|
AS
|
||
|
BEGIN
|
||
|
SET NOCOUNT ON
|
||
|
|
||
|
SELECT
|
||
|
[GroupId] [Id],
|
||
|
[ReadOnly],
|
||
|
[HidePasswords]
|
||
|
FROM
|
||
|
[dbo].[CollectionGroup]
|
||
|
WHERE
|
||
|
[CollectionId] = @CollectionId
|
||
|
END
|
||
|
GO
|
||
|
|
||
|
-- Stored Procedure: Collection_ReadWithGroupsAndUsersById
|
||
|
CREATE OR ALTER PROCEDURE [dbo].[Collection_ReadWithGroupsAndUsersById]
|
||
|
@Id UNIQUEIDENTIFIER
|
||
|
AS
|
||
|
BEGIN
|
||
|
SET NOCOUNT ON
|
||
|
|
||
|
EXEC [dbo].[Collection_ReadById] @Id
|
||
|
|
||
|
EXEC [dbo].[CollectionGroup_ReadByCollectionId] @Id
|
||
|
|
||
|
EXEC [dbo].[CollectionUser_ReadByCollectionId] @Id
|
||
|
END
|
||
|
GO
|
||
|
|
||
|
-- Stored Procedure: Collection_ReadWithGroupsAndUsersByIdUserId
|
||
|
CREATE OR ALTER PROCEDURE [dbo].[Collection_ReadWithGroupsAndUsersByIdUserId]
|
||
|
@Id UNIQUEIDENTIFIER,
|
||
|
@UserId UNIQUEIDENTIFIER
|
||
|
AS
|
||
|
BEGIN
|
||
|
SET NOCOUNT ON
|
||
|
|
||
|
EXEC [dbo].[Collection_ReadByIdUserId] @Id, @UserId
|
||
|
|
||
|
EXEC [dbo].[CollectionGroup_ReadByCollectionId] @Id
|
||
|
|
||
|
EXEC [dbo].[CollectionUser_ReadByCollectionId] @Id
|
||
|
END
|
||
|
GO
|
||
|
|
||
|
-- Stored Procedure: Collection_CreateWithGroupsAndUsers
|
||
|
CREATE OR ALTER PROCEDURE [dbo].[Collection_CreateWithGroupsAndUsers]
|
||
|
@Id UNIQUEIDENTIFIER,
|
||
|
@OrganizationId UNIQUEIDENTIFIER,
|
||
|
@Name VARCHAR(MAX),
|
||
|
@ExternalId NVARCHAR(300),
|
||
|
@CreationDate DATETIME2(7),
|
||
|
@RevisionDate DATETIME2(7),
|
||
|
@Groups AS [dbo].[SelectionReadOnlyArray] READONLY,
|
||
|
@Users AS [dbo].[SelectionReadOnlyArray] READONLY
|
||
|
AS
|
||
|
BEGIN
|
||
|
SET NOCOUNT ON
|
||
|
|
||
|
EXEC [dbo].[Collection_Create] @Id, @OrganizationId, @Name, @ExternalId, @CreationDate, @RevisionDate
|
||
|
|
||
|
-- Groups
|
||
|
;WITH [AvailableGroupsCTE] AS(
|
||
|
SELECT
|
||
|
[Id]
|
||
|
FROM
|
||
|
[dbo].[Group]
|
||
|
WHERE
|
||
|
[OrganizationId] = @OrganizationId
|
||
|
)
|
||
|
INSERT INTO [dbo].[CollectionGroup]
|
||
|
(
|
||
|
[CollectionId],
|
||
|
[GroupId],
|
||
|
[ReadOnly],
|
||
|
[HidePasswords]
|
||
|
)
|
||
|
SELECT
|
||
|
@Id,
|
||
|
[Id],
|
||
|
[ReadOnly],
|
||
|
[HidePasswords]
|
||
|
FROM
|
||
|
@Groups
|
||
|
WHERE
|
||
|
[Id] IN (SELECT [Id] FROM [AvailableGroupsCTE])
|
||
|
|
||
|
-- Users
|
||
|
;WITH [AvailableUsersCTE] AS(
|
||
|
SELECT
|
||
|
[Id]
|
||
|
FROM
|
||
|
[dbo].[OrganizationUser]
|
||
|
WHERE
|
||
|
[OrganizationId] = @OrganizationId
|
||
|
)
|
||
|
INSERT INTO [dbo].[CollectionUser]
|
||
|
(
|
||
|
[CollectionId],
|
||
|
[OrganizationUserId],
|
||
|
[ReadOnly],
|
||
|
[HidePasswords]
|
||
|
)
|
||
|
SELECT
|
||
|
@Id,
|
||
|
[Id],
|
||
|
[ReadOnly],
|
||
|
[HidePasswords]
|
||
|
FROM
|
||
|
@Users
|
||
|
WHERE
|
||
|
[Id] IN (SELECT [Id] FROM [AvailableUsersCTE])
|
||
|
|
||
|
EXEC [dbo].[User_BumpAccountRevisionDateByOrganizationId] @OrganizationId
|
||
|
END
|
||
|
GO
|
||
|
|
||
|
-- Stored Procedure: Collection_UpdateWithGroupsAndUsers
|
||
|
CREATE OR ALTER PROCEDURE [dbo].[Collection_UpdateWithGroupsAndUsers]
|
||
|
@Id UNIQUEIDENTIFIER,
|
||
|
@OrganizationId UNIQUEIDENTIFIER,
|
||
|
@Name VARCHAR(MAX),
|
||
|
@ExternalId NVARCHAR(300),
|
||
|
@CreationDate DATETIME2(7),
|
||
|
@RevisionDate DATETIME2(7),
|
||
|
@Groups AS [dbo].[SelectionReadOnlyArray] READONLY,
|
||
|
@Users AS [dbo].[SelectionReadOnlyArray] READONLY
|
||
|
AS
|
||
|
BEGIN
|
||
|
SET NOCOUNT ON
|
||
|
|
||
|
EXEC [dbo].[Collection_Update] @Id, @OrganizationId, @Name, @ExternalId, @CreationDate, @RevisionDate
|
||
|
|
||
|
-- Groups
|
||
|
;WITH [AvailableGroupsCTE] AS(
|
||
|
SELECT
|
||
|
Id
|
||
|
FROM
|
||
|
[dbo].[Group]
|
||
|
WHERE
|
||
|
OrganizationId = @OrganizationId
|
||
|
)
|
||
|
MERGE
|
||
|
[dbo].[CollectionGroup] AS [Target]
|
||
|
USING
|
||
|
@Groups AS [Source]
|
||
|
ON
|
||
|
[Target].[CollectionId] = @Id
|
||
|
AND [Target].[GroupId] = [Source].[Id]
|
||
|
WHEN NOT MATCHED BY TARGET
|
||
|
AND [Source].[Id] IN (SELECT [Id] FROM [AvailableGroupsCTE]) THEN
|
||
|
INSERT VALUES
|
||
|
(
|
||
|
@Id,
|
||
|
[Source].[Id],
|
||
|
[Source].[ReadOnly],
|
||
|
[Source].[HidePasswords]
|
||
|
)
|
||
|
WHEN MATCHED AND (
|
||
|
[Target].[ReadOnly] != [Source].[ReadOnly]
|
||
|
OR [Target].[HidePasswords] != [Source].[HidePasswords]
|
||
|
) THEN
|
||
|
UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly],
|
||
|
[Target].[HidePasswords] = [Source].[HidePasswords]
|
||
|
WHEN NOT MATCHED BY SOURCE
|
||
|
AND [Target].[CollectionId] = @Id THEN
|
||
|
DELETE
|
||
|
;
|
||
|
|
||
|
-- Users
|
||
|
;WITH [AvailableGroupsCTE] AS(
|
||
|
SELECT
|
||
|
Id
|
||
|
FROM
|
||
|
[dbo].[OrganizationUser]
|
||
|
WHERE
|
||
|
OrganizationId = @OrganizationId
|
||
|
)
|
||
|
MERGE
|
||
|
[dbo].[CollectionUser] AS [Target]
|
||
|
USING
|
||
|
@Users AS [Source]
|
||
|
ON
|
||
|
[Target].[CollectionId] = @Id
|
||
|
AND [Target].[OrganizationUserId] = [Source].[Id]
|
||
|
WHEN NOT MATCHED BY TARGET
|
||
|
AND [Source].[Id] IN (SELECT [Id] FROM [AvailableGroupsCTE]) THEN
|
||
|
INSERT VALUES
|
||
|
(
|
||
|
@Id,
|
||
|
[Source].[Id],
|
||
|
[Source].[ReadOnly],
|
||
|
[Source].[HidePasswords]
|
||
|
)
|
||
|
WHEN MATCHED AND (
|
||
|
[Target].[ReadOnly] != [Source].[ReadOnly]
|
||
|
OR [Target].[HidePasswords] != [Source].[HidePasswords]
|
||
|
) THEN
|
||
|
UPDATE SET [Target].[ReadOnly] = [Source].[ReadOnly],
|
||
|
[Target].[HidePasswords] = [Source].[HidePasswords]
|
||
|
WHEN NOT MATCHED BY SOURCE
|
||
|
AND [Target].[CollectionId] = @Id THEN
|
||
|
DELETE
|
||
|
;
|
||
|
|
||
|
EXEC [dbo].[User_BumpAccountRevisionDateByCollectionId] @Id, @OrganizationId
|
||
|
END
|