mirror of
https://github.com/bitwarden/server.git
synced 2026-01-31 14:13:18 +08:00
61 lines
1.4 KiB
MySQL
61 lines
1.4 KiB
MySQL
|
|
-- Add UsersGetPremium to IX_Organization_Enabled index to support premium access queries
|
||
|
|
|
||
|
|
IF EXISTS (
|
||
|
|
SELECT * FROM sys.indexes
|
||
|
|
WHERE name = 'IX_Organization_Enabled'
|
||
|
|
AND object_id = OBJECT_ID('[dbo].[Organization]')
|
||
|
|
)
|
||
|
|
BEGIN
|
||
|
|
CREATE NONCLUSTERED INDEX [IX_Organization_Enabled]
|
||
|
|
ON [dbo].[Organization]([Id] ASC, [Enabled] ASC)
|
||
|
|
INCLUDE ([UseTotp], [UsersGetPremium])
|
||
|
|
WITH (DROP_EXISTING = ON);
|
||
|
|
END
|
||
|
|
ELSE
|
||
|
|
BEGIN
|
||
|
|
CREATE NONCLUSTERED INDEX [IX_Organization_Enabled]
|
||
|
|
ON [dbo].[Organization]([Id] ASC, [Enabled] ASC)
|
||
|
|
INCLUDE ([UseTotp], [UsersGetPremium]);
|
||
|
|
END
|
||
|
|
GO
|
||
|
|
|
||
|
|
CREATE OR ALTER VIEW [dbo].[UserPremiumAccessView]
|
||
|
|
AS
|
||
|
|
SELECT
|
||
|
|
U.[Id],
|
||
|
|
U.[Premium] AS [PersonalPremium],
|
||
|
|
CAST(
|
||
|
|
MAX(CASE
|
||
|
|
WHEN O.[Id] IS NOT NULL THEN 1
|
||
|
|
ELSE 0
|
||
|
|
END) AS BIT
|
||
|
|
) AS [OrganizationPremium]
|
||
|
|
FROM
|
||
|
|
[dbo].[User] U
|
||
|
|
LEFT JOIN
|
||
|
|
[dbo].[OrganizationUser] OU ON OU.[UserId] = U.[Id]
|
||
|
|
LEFT JOIN
|
||
|
|
[dbo].[Organization] O ON O.[Id] = OU.[OrganizationId]
|
||
|
|
AND O.[UsersGetPremium] = 1
|
||
|
|
AND O.[Enabled] = 1
|
||
|
|
GROUP BY
|
||
|
|
U.[Id], U.[Premium];
|
||
|
|
GO
|
||
|
|
|
||
|
|
CREATE OR ALTER PROCEDURE [dbo].[User_ReadPremiumAccessByIds]
|
||
|
|
@Ids [dbo].[GuidIdArray] READONLY
|
||
|
|
AS
|
||
|
|
BEGIN
|
||
|
|
SET NOCOUNT ON
|
||
|
|
|
||
|
|
SELECT
|
||
|
|
UPA.[Id],
|
||
|
|
UPA.[PersonalPremium],
|
||
|
|
UPA.[OrganizationPremium]
|
||
|
|
FROM
|
||
|
|
[dbo].[UserPremiumAccessView] UPA
|
||
|
|
WHERE
|
||
|
|
UPA.[Id] IN (SELECT [Id] FROM @Ids)
|
||
|
|
END
|
||
|
|
GO
|