Skip to content

[PM-33951] automatically confirm pending users on admin login#7527

Open
JaredScar wants to merge 73 commits into
mainfrom
ac/pm-33919-automatically-confirm-pending-users-on-admin-login
Open

[PM-33951] automatically confirm pending users on admin login#7527
JaredScar wants to merge 73 commits into
mainfrom
ac/pm-33919-automatically-confirm-pending-users-on-admin-login

Conversation

@JaredScar
Copy link
Copy Markdown
Contributor

🎟️ Tracking

https://bitwarden.atlassian.net/browse/PM-33951

📔 Objective

When an admin logins to the browser extension for an organization, we want users who accepted an invite to be confirmed as users automatically. When the extension is locked, unlocking should also proceed to accept the users pending confirmation.

- Introduced IBulkAutomaticallyConfirmOrganizationUsersCommand and its implementation.
- Added new endpoints in OrganizationUsersController for bulk auto-confirm and fetching pending auto-confirm users.
- Updated IOrganizationUserRepository to include a method for retrieving pending auto-confirm users.
- Enhanced feature flags with BulkAutoConfirmOnLogin.
- Added response models for pending auto-confirm users.
- Implemented tests for the bulk auto-confirm command to ensure correct behavior.
…-33919-automatically-confirm-pending-users-on-admin-login
@JaredScar JaredScar requested a review from a team as a code owner April 22, 2026 15:17
@JaredScar JaredScar requested a review from BTreston April 22, 2026 15:17
@JaredScar JaredScar added the ai-review Request a Claude code review label Apr 22, 2026
@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 22, 2026

Overall Assessment: APPROVE

Adds bulk auto-confirmation of pending organization users on admin login, gated behind the BulkAutoConfirmOnLogin feature flag. Introduces two OrganizationUsersController endpoints (GET pending-auto-confirm, POST bulk-auto-confirm) protected by [Authorize<ManageUsersRequirement>], a new [BindOrganization] model binder that resolves the route's Organization (raising NotFoundException when missing), a BulkAutomaticallyConfirmOrganizationUsersCommand + dedicated bulk validator with Task.WhenAll data prefetching for policies, 2FA status, membership counts, and provider users, and dual-ORM stored procedures (OrganizationUser_ReadByPendingAutoConfirm, OrganizationUser_UpdateManyStatusKey) with matching Dapper and EF Core implementations plus the OrganizationUserConfirmByIdsArray user-defined type. Integration tests cover the bulk endpoint and policy enforcement paths.

This PR has been through extensive review iterations with Admin Console, Auth, and DBA reviewers; all 100 prior review threads are resolved, and previously raised substantive concerns (SP signature parity, dual-ORM divergence on Status filtering, TOCTOU on the EF revision-date update, validator unit-test coverage, command/request shape) have been addressed in the current state.

Code Review Details

No new blocking or important findings beyond what prior reviewers have already addressed and resolved.

Observations worth tracking (not blocking):

  • Dead stored procedure left behind from rename. Commit 4d5f03c94 renamed OrganizationUser_UpdateStatusKey to OrganizationUser_UpdateManyStatusKey, but the earlier dead artifact src/Sql/dbo/Stored Procedures/OrganizationUser_ConfirmByIds.sql and its migration util/Migrator/DbScripts/2026-05-14_00_AddOrganizationUserConfirmByIds.sql are still present in the PR. A grep across the repo shows no callers — Dapper invokes OrganizationUser_UpdateManyStatusKey (see src/Infrastructure.Dapper/AdminConsole/Repositories/OrganizationUserRepository.cs), not OrganizationUser_ConfirmByIds. Consider deleting the SP file and the migration before merge, since orphaned stored procedures in the schema add noise without value.

  • Intermediate migration 2026-05-14_01 uses the wrong Type value and a misleading filename. util/Migrator/DbScripts/2026-05-14_01_UpdateOrganizationUser_ReadByOrganizationId_AddStatusParam.sql creates OrganizationUser_ReadByPendingAutoConfirm with [Type] = 0 commented -- User, but src/Core/AdminConsole/Enums/OrganizationUserType.cs defines Owner = 0 and User = 2. The later migration in this same PR (util/Migrator/DbScripts/2026-05-22_01_AddOrganizationUser_ReadByPendingAutoConfirm.sql) uses CREATE OR ALTER with the correct Type = 2, and the source-of-truth SP at src/Sql/dbo/Stored Procedures/OrganizationUser_ReadByPendingAutoConfirm.sql also uses Type = 2, so the final deployed state is correct. The intermediate migration is, however, buggy code in the migration history, and its filename (UpdateOrganizationUser_ReadByOrganizationId_AddStatusParam) no longer matches the SP it actually creates. Consider deleting the superseded 2026-05-14_01 script before merge, or correcting its Type value and filename to match the final state — purely a cleanliness item, not a runtime risk since both migrations ship together.

Comment thread src/Infrastructure.Dapper/AdminConsole/Repositories/OrganizationUserRepository.cs Outdated
@codecov
Copy link
Copy Markdown

codecov Bot commented Apr 22, 2026

Codecov Report

❌ Patch coverage is 16.75824% with 303 lines in your changes missing coverage. Please review.
✅ Project coverage is 14.76%. Comparing base (d903096) to head (3b3cbb6).
⚠️ Report is 6 commits behind head on main.

Files with missing lines Patch % Lines
...ulkAutomaticallyConfirmOrganizationUsersCommand.cs 0.00% 152 Missing ⚠️
...kAutomaticallyConfirmOrganizationUsersValidator.cs 0.00% 101 Missing ⚠️
...ser/AutomaticallyConfirmOrganizationUserRequest.cs 0.00% 16 Missing ⚠️
...AutoConfirmUser/GetPendingAutoConfirmUsersQuery.cs 0.00% 15 Missing ⚠️
...maticUserConfirmationPolicyEnforcementValidator.cs 0.00% 14 Missing ⚠️
...eatures/OrganizationServiceCollectionExtensions.cs 0.00% 3 Missing ⚠️
...ser/AutomaticallyConfirmOrganizationUserCommand.cs 0.00% 2 Missing ⚠️

❗ There is a different number of reports uploaded between BASE (d903096) and HEAD (3b3cbb6). Click for more details.

HEAD has 1 upload less than BASE
Flag BASE (d903096) HEAD (3b3cbb6)
2 1
Additional details and impacted files
@@             Coverage Diff             @@
##             main    #7527       +/-   ##
===========================================
- Coverage   64.86%   14.76%   -50.10%     
===========================================
  Files        2140     1325      -815     
  Lines       94629    57575    -37054     
  Branches     8445     4512     -3933     
===========================================
- Hits        61378     8500    -52878     
- Misses      31155    48930    +17775     
+ Partials     2096      145     -1951     

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented Apr 22, 2026

Logo
Checkmarx One – Scan Summary & Details3c349dc4-6281-4460-b8c6-5b1950193fc8


New Issues (28) Checkmarx found the following issues in this Pull Request
# Severity Issue Source File / Package Checkmarx Insight
1 MEDIUM CSRF src/Api/AdminConsole/Controllers/OrganizationUsersController.cs: 522
detailsMethod at line 522 of /src/Api/AdminConsole/Controllers/OrganizationUsersController.cs gets a parameter from a user request from targetOrganizati...
Attack Vector
2 MEDIUM CSRF src/Api/Auth/Controllers/EmergencyAccessController.cs: 82
detailsMethod at line 82 of /src/Api/Auth/Controllers/EmergencyAccessController.cs gets a parameter from a user request from model. This parameter valu...
Attack Vector
3 MEDIUM CSRF src/Api/Billing/Controllers/OrganizationBillingController.cs: 123
detailsMethod at line 123 of /src/Api/Billing/Controllers/OrganizationBillingController.cs gets a parameter from a user request from requestBody. This ...
Attack Vector
4 MEDIUM CSRF src/Api/Billing/Controllers/LicensesController.cs: 48
detailsMethod at line 48 of /src/Api/Billing/Controllers/LicensesController.cs gets a parameter from a user request from id. This parameter value flows...
Attack Vector
5 MEDIUM CSRF src/Admin/Controllers/UsersController.cs: 80
detailsMethod at line 80 of /src/Admin/Controllers/UsersController.cs gets a parameter from a user request from id. This parameter value flows through ...
Attack Vector
6 MEDIUM CSRF src/Admin/Controllers/UsersController.cs: 97
detailsMethod at line 97 of /src/Admin/Controllers/UsersController.cs gets a parameter from a user request from id. This parameter value flows through ...
Attack Vector
7 MEDIUM CSRF src/Api/KeyManagement/Controllers/UsersController.cs: 33
detailsMethod at line 33 of /src/Api/KeyManagement/Controllers/UsersController.cs gets a parameter from a user request from id. This parameter value fl...
Attack Vector
8 MEDIUM CSRF src/Api/AdminConsole/Controllers/OrganizationUsersController.cs: 796
detailsMethod at line 796 of /src/Api/AdminConsole/Controllers/OrganizationUsersController.cs gets a parameter from a user request from model. This par...
Attack Vector
9 MEDIUM CSRF src/Api/AdminConsole/Controllers/OrganizationUsersController.cs: 721
detailsMethod at line 721 of /src/Api/AdminConsole/Controllers/OrganizationUsersController.cs gets a parameter from a user request from request. This p...
Attack Vector
10 MEDIUM CSRF src/Api/AdminConsole/Controllers/OrganizationUsersController.cs: 380
detailsMethod at line 380 of /src/Api/AdminConsole/Controllers/OrganizationUsersController.cs gets a parameter from a user request from model. This par...
Attack Vector
11 MEDIUM CSRF src/Api/AdminConsole/Controllers/OrganizationUsersController.cs: 795
detailsMethod at line 795 of /src/Api/AdminConsole/Controllers/OrganizationUsersController.cs gets a parameter from a user request from id. This parame...
Attack Vector
12 MEDIUM CSRF src/Api/AdminConsole/Controllers/OrganizationUsersController.cs: 371
detailsMethod at line 371 of /src/Api/AdminConsole/Controllers/OrganizationUsersController.cs gets a parameter from a user request from model. This par...
Attack Vector
13 MEDIUM CSRF src/Api/AdminConsole/Controllers/OrganizationUsersController.cs: 796
detailsMethod at line 796 of /src/Api/AdminConsole/Controllers/OrganizationUsersController.cs gets a parameter from a user request from model. This par...
Attack Vector
14 MEDIUM CSRF src/Api/AdminConsole/Controllers/OrganizationUsersController.cs: 795
detailsMethod at line 795 of /src/Api/AdminConsole/Controllers/OrganizationUsersController.cs gets a parameter from a user request from id. This parame...
Attack Vector
15 MEDIUM CSRF src/Api/AdminConsole/Controllers/OrganizationUsersController.cs: 736
detailsMethod at line 736 of /src/Api/AdminConsole/Controllers/OrganizationUsersController.cs gets a parameter from a user request from model. This par...
Attack Vector
16 MEDIUM CSRF src/Api/AdminConsole/Controllers/OrganizationUsersController.cs: 794
detailsMethod at line 794 of /src/Api/AdminConsole/Controllers/OrganizationUsersController.cs gets a parameter from a user request from orgId. This par...
Attack Vector
17 MEDIUM CSRF src/Api/AdminConsole/Controllers/OrganizationUsersController.cs: 794
detailsMethod at line 794 of /src/Api/AdminConsole/Controllers/OrganizationUsersController.cs gets a parameter from a user request from orgId. This par...
Attack Vector
18 MEDIUM CSRF src/Api/Vault/Controllers/CiphersController.cs: 1353
detailsMethod at line 1353 of /src/Api/Vault/Controllers/CiphersController.cs gets a parameter from a user request from id. This parameter value flows ...
Attack Vector
19 MEDIUM CSRF src/Api/Vault/Controllers/CiphersController.cs: 1385
detailsMethod at line 1385 of /src/Api/Vault/Controllers/CiphersController.cs gets a parameter from a user request from id. This parameter value flows ...
Attack Vector
20 MEDIUM CSRF src/Api/Vault/Controllers/CiphersController.cs: 1417
detailsMethod at line 1417 of /src/Api/Vault/Controllers/CiphersController.cs gets a parameter from a user request from id. This parameter value flows ...
Attack Vector
21 MEDIUM CSRF src/Api/Vault/Controllers/CiphersController.cs: 1446
detailsMethod at line 1446 of /src/Api/Vault/Controllers/CiphersController.cs gets a parameter from a user request from id. This parameter value flows ...
Attack Vector
22 MEDIUM CSRF src/Api/Auth/Controllers/AccountsController.cs: 558
detailsMethod at line 558 of /src/Api/Auth/Controllers/AccountsController.cs gets a parameter from a user request from model. This parameter value flow...
Attack Vector
23 MEDIUM CSRF src/Api/Auth/Controllers/AccountsController.cs: 169
detailsMethod at line 169 of /src/Api/Auth/Controllers/AccountsController.cs gets a parameter from a user request from model. This parameter value flow...
Attack Vector
24 MEDIUM CSRF src/Api/Vault/Controllers/CiphersController.cs: 1558
detailsMethod at line 1558 of /src/Api/Vault/Controllers/CiphersController.cs gets a parameter from a user request from id. This parameter value flows ...
Attack Vector
25 MEDIUM CSRF src/Api/Auth/Controllers/AccountsController.cs: 217
detailsMethod at line 217 of /src/Api/Auth/Controllers/AccountsController.cs gets a parameter from a user request from model. This parameter value flow...
Attack Vector
26 MEDIUM CSRF src/Api/Auth/Controllers/AccountsController.cs: 291
detailsMethod at line 291 of /src/Api/Auth/Controllers/AccountsController.cs gets a parameter from a user request from model. This parameter value flow...
Attack Vector
27 MEDIUM CSRF src/Api/Auth/Controllers/AccountsController.cs: 452
detailsMethod at line 452 of /src/Api/Auth/Controllers/AccountsController.cs gets a parameter from a user request from model. This parameter value flow...
Attack Vector
28 MEDIUM CSRF src/Api/Vault/Controllers/CiphersController.cs: 1385
detailsMethod at line 1385 of /src/Api/Vault/Controllers/CiphersController.cs gets a parameter from a user request from id. This parameter value flows ...
Attack Vector

Fixed Issues (3) Great job! The following issues were fixed in this Pull Request
Severity Issue Source File / Package
MEDIUM CSRF src/Identity/Controllers/AccountsController.cs: 138
MEDIUM CSRF src/Api/KeyManagement/Controllers/AccountsKeyManagementController.cs: 173
MEDIUM CSRF src/Api/Auth/Controllers/AccountsController.cs: 558

@BTreston BTreston requested review from a team and eliykat April 23, 2026 14:06
Copy link
Copy Markdown
Contributor

@BTreston BTreston left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I've added a server dev for a second set of eyes, but here are some changes in the meantime.

Comment thread src/Api/AdminConsole/Controllers/OrganizationUsersController.cs Outdated
Comment thread src/Api/AdminConsole/Controllers/OrganizationUsersController.cs Outdated
Comment thread src/Api/AdminConsole/Controllers/OrganizationUsersController.cs Outdated
Comment thread src/Api/AdminConsole/Controllers/OrganizationUsersController.cs
Comment thread src/Core/AdminConsole/Repositories/IOrganizationUserRepository.cs Outdated
Comment thread src/Core/Constants.cs Outdated
- Updated OrganizationUsersController to utilize feature flags for bulk auto-confirm endpoints.
- Modified IOrganizationUserRepository to retrieve organization users by status.
- Enhanced stored procedure to accept a status parameter for filtering users.
- Adjusted response handling in bulk auto-confirm method to return appropriate results.

This refactor improves the clarity and functionality of the bulk auto-confirm feature, ensuring it adheres to the new status-based retrieval logic.
@JaredScar JaredScar requested a review from a team as a code owner April 23, 2026 16:04
@JaredScar JaredScar requested a review from BTreston April 23, 2026 16:13
Comment thread src/Api/AdminConsole/Controllers/OrganizationUsersController.cs Outdated
JaredScar and others added 3 commits April 24, 2026 11:21
…rsController

- Added IPolicyQuery dependency to OrganizationUsersController.
- Enhanced GetPendingAutoConfirmUsersAsync method to check organization ability and policy for automatic user confirmation.
- Improved response handling to return an empty list if automatic confirmation is not enabled.

This update ensures that pending users are only confirmed automatically when the organization settings allow it.
- Introduced BulkAutomaticallyConfirmOrganizationUsersCommand to handle batch confirmations of organization users.
- Added BulkAutomaticallyConfirmOrganizationUsersValidator for validating multiple confirmation requests efficiently.
- Enhanced IOrganizationUserRepository with ConfirmManyOrganizationUsersAsync method for bulk confirmation in a single database operation.
- Created stored procedure OrganizationUser_ConfirmByIds to process bulk confirmations in SQL.
- Added user-defined table type OrganizationUserToConfirmArray for passing multiple user confirmations to the stored procedure.

This implementation improves the efficiency and scalability of user confirmation processes within organizations.
@JaredScar JaredScar requested a review from eliykat April 27, 2026 15:02
Copy link
Copy Markdown
Contributor

@mkincaid-bw mkincaid-bw left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A few changes requested.

Comment thread src/Sql/dbo/Stored Procedures/OrganizationUser_ConfirmByIds.sql
Comment thread src/Sql/dbo/User Defined Types/OrganizationUserToConfirmArray.sql Outdated
Comment thread src/Sql/dbo/Stored Procedures/OrganizationUser_ReadByOrganizationId.sql Outdated
…-33919-automatically-confirm-pending-users-on-admin-login
@JaredScar JaredScar requested a review from mkincaid-bw April 28, 2026 16:38
- Removed the user-defined table type `OrganizationUserToConfirmArray` and replaced it with a JSON parameter in the stored procedure `OrganizationUser_UpdateManyConfirmByIds`.
- Updated the `OrganizationUserRepository` to utilize the new JSON approach for confirming multiple users.
- Renamed the stored procedure `OrganizationUser_ReadByOrganizationId` to `OrganizationUser_ReadManyByOrganizationIdStatus` and adjusted its parameters to include only `@OrganizationId` and `@Status`.
- Created a new stored procedure `OrganizationUser_UpdateManyConfirmByIds` to handle bulk confirmations using JSON input.

These changes streamline the confirmation process and improve database interaction efficiency.
Comment thread src/Sql/dbo/Stored Procedures/OrganizationUser_ReadByOrganizationId.sql Outdated
…-33919-automatically-confirm-pending-users-on-admin-login
…-33919-automatically-confirm-pending-users-on-admin-login
@JaredScar JaredScar requested a review from jrmccannon May 18, 2026 15:59
…ModelBinder for automatic organization parameter binding
@sonarqubecloud
Copy link
Copy Markdown

JaredScar added 7 commits May 18, 2026 12:04
…ion methods for organization users

- Implemented ConfirmManyOrganizationUsersAsync to confirm multiple users in a single operation.
- Added GetManyPendingAutoConfirmAsync to retrieve users pending automatic confirmation.
- Created stored procedures for bulk confirmation and fetching pending users.
- Updated relevant repository interfaces and implementations across Dapper and Entity Framework.
…ationUsersAsync to IReadOnlyCollection

- Updated the ConfirmManyOrganizationUsersAsync method signature in the IOrganizationUserRepository and its implementations to use IReadOnlyCollection instead of IEnumerable for better performance and clarity.
- Adjusted related repository methods in both Dapper and Entity Framework implementations to reflect this change.
- Added unit tests to ensure the new implementation behaves as expected, including scenarios for mixed batches and idempotency.
…tionModelBinder for organization parameter binding with unit tests
…ation parameter binding

This commit introduces the BindOrganizationAttribute and its associated OrganizationModelBinder to facilitate the binding of Organization parameters in controller actions. The binder retrieves the organization from the database using route parameters and handles exceptions for missing or invalid IDs. Additionally, tests for the new attribute and binder have been added to ensure correct functionality and error handling.
… binding

This commit updates the GetResetPasswordDetails method in the OrganizationUsersController to utilize the organization object passed as a parameter, ensuring correct validation of the organization user against the provided organization. This change enhances the method's reliability and aligns it with the recent introduction of the BindOrganizationAttribute for parameter binding.
JaredScar and others added 3 commits May 21, 2026 11:48
…dingAutoConfirm methods

- Introduced ConfirmManyOrganizationUsersTests to validate the confirmation of multiple organization users, ensuring only accepted users are confirmed and idempotency is maintained.
- Added GetManyPendingAutoConfirmTests to verify retrieval of pending auto-confirm users, ensuring only eligible users are returned based on specific criteria.
- Removed duplicate test implementations from OrganizationUserRepositoryTests to maintain clarity and organization in the test suite.
JaredScar and others added 4 commits May 21, 2026 12:04
…n GetResetPasswordDetails method

- Updated test cases to pass the organization directly instead of relying on repository calls.
- Ensured that the tests correctly assert NotFoundException when the organization user does not match the bound organization.
- Improved clarity in test setup by explicitly binding the organization to the method calls.
…Collection

This commit updates the ConfirmManyOrganizationUsersAsync method in the IOrganizationUserRepository and its implementations to accept an IReadOnlyCollection instead of an IEnumerable for the usersToConfirm parameter. This change enhances type safety and performance by ensuring that the collection is not modified during processing. Additionally, new integration tests have been added to verify the functionality of confirming multiple organization users, ensuring only accepted users are processed and confirming idempotency in subsequent calls.
WHERE
[OrganizationId] = @OrganizationId
AND [Status] = 1 -- Accepted
AND [Type] = 0 -- User
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL — Dual-ORM divergence: filter selects Owners instead of Users

OrganizationUserType.User = 2, not 0. Type = 0 is Owner. The comment says -- User but the predicate filters for Owner.

The EF implementation in src/Infrastructure.EntityFramework/AdminConsole/Repositories/OrganizationUserRepository.cs:1128 correctly filters ou.Type == OrganizationUserType.User (=2), so this stored procedure diverges from the EF implementation. The MSSQL backend will return organization owners while the EF-backed databases return regular users.

Impact:

  • The new GET pending-auto-confirm endpoint returns owners on MSSQL but pending User-type members on Postgres/MySQL/SQLite.
  • The new integration test GetManyPendingAutoConfirmAsync_ReturnsOnlyAcceptedUsersWithUserType will fail on MSSQL: CreateAcceptedTestOrganizationUserAsync creates a Type = Owner user that the test expects to be excluded, but the buggy SP will return it. Meanwhile the eligible Type = User user will be excluded.

The same fix is needed in util/Migrator/DbScripts/2026-05-14_01_UpdateOrganizationUser_ReadByOrganizationId_AddStatusParam.sql:14.

Suggested change
AND [Type] = 0 -- User
AND [Type] = 2 -- User

WHERE
[OrganizationId] = @OrganizationId
AND [Status] = 1 -- Accepted
AND [Type] = 0 -- User
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

CRITICAL — Dual-ORM divergence: filter selects Owners instead of Users

Same bug as in src/Sql/dbo/Stored Procedures/OrganizationUser_ReadByPendingAutoConfirm.sql:14. Type = 0 is Owner; User = 2. The migration must apply the corrected predicate so existing MSSQL installations match the EF behaviour and the source-of-truth stored procedure.

Suggested change
AND [Type] = 0 -- User
AND [Type] = 2 -- User

Side note: the migration filename (UpdateOrganizationUser_ReadByOrganizationId_AddStatusParam.sql) describes a different change than the actual content (creates OrganizationUser_ReadByPendingAutoConfirm). Consider renaming for accurate change history, e.g. 2026-05-14_01_AddOrganizationUser_ReadByPendingAutoConfirm.sql.

JaredScar and others added 7 commits May 22, 2026 12:12
…e related repository method

- Added OrganizationUser_UpdateStatusKey stored procedure to handle updating the status and key of organization users based on a JSON input.
- Updated OrganizationUserRepository to call the new stored procedure instead of the previous confirmation procedure.
- Modified OrganizationUser_ReadByPendingAutoConfirm stored procedure to filter users by a new type value.
- Enhanced integration tests to verify the correct behavior of the updated confirmation logic, ensuring revision dates are accurately tracked.
…ithub.com/bitwarden/server into ac/pm-33919-automatically-confirm-pending-users-on-admin-login
…/server into ac/pm-33919-automatically-confirm-pending-users-on-admin-login
…anyStatusKey

- Renamed the stored procedure to OrganizationUser_UpdateManyStatusKey to better reflect its functionality of updating multiple organization users' statuses.
- Updated the OrganizationUserRepository to call the new stored procedure.
- Adjusted the migration script to create or alter the procedure accordingly.
…/server into ac/pm-33919-automatically-confirm-pending-users-on-admin-login
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-review Request a Claude code review

Projects

None yet

Development

Successfully merging this pull request may close these issues.

6 participants