mirror of
https://github.com/bitwarden/server.git
synced 2024-11-25 12:45:18 +01:00
8d69bb0aaa
* feat: Add stored procedure for reading organization user details with premium access by organization ID The code changes include: - Addition of a new stored procedure [dbo].[OrganizationUserUserDetailsWithPremiumAccess_ReadByOrganizationId] to read organization user details with premium access by organization ID - Modification of the IUserService interface to include an optional parameter for checking two-factor authentication with premium access - Modification of the UserService class to handle the new optional parameter in the TwoFactorIsEnabledAsync method - Addition of a new method GetManyDetailsWithPremiumAccessByOrganizationAsync in the IOrganizationUserRepository interface to retrieve organization user details with premium access by organization ID - Addition of a new view [dbo].[OrganizationUserUserDetailsWithPremiumAccessView] to retrieve organization user details with premium access * Add IUserRepository.SearchDetailsAsync that includes the field HasPremiumAccess * Check the feature flag on Admin.UsersController to see if the optimization runs * Modify PolicyService to run query optimization if the feature flag is enabled * Refactor the parameter check on UserService.TwoFactorIsEnabledAsync * Run query optimization on public MembersController if feature flag is enabled * Restore refactor * Reverted change used for development * Add unit tests for OrganizationService.RestoreUser * Separate new CheckPoliciesBeforeRestoreAsync optimization into new method * Add more unit tests * Apply refactor to bulk restore * Add GetManyDetailsAsync method to IUserRepository. Add ConfirmUsersAsync_vNext method to IOrganizationService * Add unit tests for ConfirmUser_vNext * Refactor the optimization to use the new TwoFactorIsEnabledAsync method instead of changing the existing one * Removed unused sql scripts and added migration script * Remove unnecessary view * chore: Remove unused SearchDetailsAsync method from IUserRepository and UserRepository * refactor: Use UserDetails constructor in UserRepository * Add summary to IUserRepository.GetManyDetailsAsync * Add summary descriptions to IUserService.TwoFactorIsEnabledAsync * Remove obsolete annotation from IUserRepository.UpdateUserKeyAndEncryptedDataAsync * refactor: Rename UserDetails to UserWithCalculatedPremium across the codebase * Extract IUserService.TwoFactorIsEnabledAsync into a new TwoFactorIsEnabledQuery class * Add unit tests for TwoFactorIsEnabledQuery * Update TwoFactorIsEnabledQueryTests to include additional provider types * Refactor TwoFactorIsEnabledQuery * Refactor TwoFactorIsEnabledQuery and update tests * refactor: Update TwoFactorIsEnabledQueryTests to include test for null TwoFactorProviders * refactor: Improve TwoFactorIsEnabledQuery and update tests * refactor: Improve TwoFactorIsEnabledQuery and update tests * Remove empty <returns> from summary * Update User_ReadByIdsWithCalculatedPremium stored procedure to accept JSON array of IDs
42 lines
1.1 KiB
Transact-SQL
42 lines
1.1 KiB
Transact-SQL
CREATE OR ALTER PROCEDURE [dbo].[User_ReadByIdsWithCalculatedPremium]
|
|
@Ids NVARCHAR(MAX)
|
|
AS
|
|
BEGIN
|
|
SET NOCOUNT ON;
|
|
|
|
-- Declare a table variable to hold the parsed JSON data
|
|
DECLARE @ParsedIds TABLE (Id UNIQUEIDENTIFIER);
|
|
|
|
-- Parse the JSON input into the table variable
|
|
INSERT INTO @ParsedIds (Id)
|
|
SELECT value
|
|
FROM OPENJSON(@Ids);
|
|
|
|
-- Check if the input table is empty
|
|
IF (SELECT COUNT(1) FROM @ParsedIds) < 1
|
|
BEGIN
|
|
RETURN(-1);
|
|
END
|
|
|
|
-- Main query to fetch user details and calculate premium access
|
|
SELECT
|
|
U.*,
|
|
CASE
|
|
WHEN U.[Premium] = 1
|
|
OR EXISTS (
|
|
SELECT 1
|
|
FROM [dbo].[OrganizationUser] OU
|
|
JOIN [dbo].[Organization] O ON OU.[OrganizationId] = O.[Id]
|
|
WHERE OU.[UserId] = U.[Id]
|
|
AND O.[UsersGetPremium] = 1
|
|
AND O.[Enabled] = 1
|
|
)
|
|
THEN 1
|
|
ELSE 0
|
|
END AS HasPremiumAccess
|
|
FROM
|
|
[dbo].[UserView] U
|
|
WHERE
|
|
U.[Id] IN (SELECT [Id] FROM @ParsedIds);
|
|
END;
|