[#10960] feat(authn): Implement built-in IdP storage#11023
Open
lasdf1234 wants to merge 11 commits into
Open
Conversation
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Contributor
There was a problem hiding this comment.
Pull request overview
This PR relocates the built-in IdP storage implementation into the plugins:idp-basic module by adding the IdP relational persistence layer (POs, MyBatis mappers, SQL providers) plus plugin-local DTOs and tests.
Changes:
- Added relational persistence artifacts for built-in IdP users/groups (POs, mappers, SQL provider factories, and backend-specific providers).
- Added built-in IdP REST DTOs (requests/responses) with validation and JSON SerDe tests.
- Updated
plugins:idp-basicGradle dependencies to support the added storage/DTO code and tests.
Reviewed changes
Copilot reviewed 52 out of 52 changed files in this pull request and generated 7 comments.
Show a summary per file
| File | Description |
|---|---|
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/po/TestIdpUserPO.java | Adds unit tests for IdpUserPO builder/equals/hashCode. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/po/TestIdpGroupUserRelPO.java | Adds unit tests for IdpGroupUserRelPO builder/equals/hashCode. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/po/TestIdpGroupPO.java | Adds unit tests for IdpGroupPO builder/equals/hashCode. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/mapper/TestIdpUserMetaMySQLProvider.java | Wires MySQL provider into shared SQL-provider test base. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/mapper/TestIdpGroupUserRelMySQLProvider.java | Wires MySQL provider into shared SQL-provider test base. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/mapper/TestIdpGroupMetaMySQLProvider.java | Wires MySQL provider into shared SQL-provider test base. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TestIdpUserMetaPostgreSQLProvider.java | PostgreSQL-specific SQL-provider expectations for user meta. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TestIdpGroupUserRelPostgreSQLProvider.java | PostgreSQL-specific SQL-provider expectations for group-user relation. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/TestIdpGroupMetaPostgreSQLProvider.java | PostgreSQL-specific SQL-provider expectations for group meta. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/mapper/provider/h2/TestIdpUserMetaH2Provider.java | H2 provider coverage via shared SQL-provider test base. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/mapper/provider/h2/TestIdpGroupUserRelH2Provider.java | H2 provider coverage via shared SQL-provider test base. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/mapper/provider/h2/TestIdpGroupMetaH2Provider.java | H2 provider coverage via shared SQL-provider test base. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/mapper/provider/base/TestIdpUserMetaBaseSQLProvider.java | Tests generated SQL for IdP user meta base provider. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/mapper/provider/base/TestIdpGroupUserRelBaseSQLProvider.java | Tests generated SQL/scripts for IdP group-user relation base provider. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/storage/relational/mapper/provider/base/TestIdpGroupMetaBaseSQLProvider.java | Tests generated SQL for IdP group meta base provider. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/idp/basic/dto/TestIdpUserDTO.java | JSON SerDe + validation tests for IdpUserDTO. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/idp/basic/dto/TestIdpGroupDTO.java | JSON SerDe + validation tests for IdpGroupDTO. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/idp/basic/dto/responses/TestIdpUserResponse.java | JSON SerDe + validation tests for IdpUserResponse. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/idp/basic/dto/responses/TestIdpGroupResponse.java | JSON SerDe + validation tests for IdpGroupResponse. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/idp/basic/dto/requests/TestUpdateGroupUsersRequest.java | JSON SerDe + validation tests for UpdateGroupUsersRequest. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/idp/basic/dto/requests/TestResetPasswordRequest.java | JSON SerDe + validation + password redaction tests for ResetPasswordRequest. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/idp/basic/dto/requests/TestCreateUserRequest.java | JSON SerDe + validation + password redaction tests for CreateUserRequest. |
| plugins/idp-basic/src/test/java/org/apache/gravitino/idp/basic/dto/requests/TestCreateGroupRequest.java | JSON SerDe + validation tests for CreateGroupRequest. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/service/IdpUserMetaService.java | Adds IdP user metadata service coordinating mapper operations. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/service/IdpGroupMetaService.java | Adds IdP group metadata service coordinating mapper operations. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/po/IdpUserPO.java | Adds relational PO for IdP users with builder + equals/hashCode. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/po/IdpGroupUserRelPO.java | Adds relational PO for group-user relationship rows. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/po/IdpGroupPO.java | Adds relational PO for IdP groups with builder + equals/hashCode. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/IdpUserMetaPostgreSQLProvider.java | PostgreSQL overrides for IdP user SQL generation. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/IdpGroupUserRelPostgreSQLProvider.java | PostgreSQL overrides for relation SQL generation (incl. guarded IN clause). |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/postgresql/IdpGroupMetaPostgreSQLProvider.java | PostgreSQL overrides for IdP group SQL generation. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/h2/IdpUserMetaH2Provider.java | H2 provider (inherits base SQL behavior). |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/h2/IdpGroupUserRelH2Provider.java | H2 provider (inherits base SQL behavior). |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/h2/IdpGroupMetaH2Provider.java | H2 provider (inherits base SQL behavior). |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/IdpUserMetaBaseSQLProvider.java | Base SQL provider for IdP user meta operations. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/IdpGroupUserRelBaseSQLProvider.java | Base SQL provider for group-user relation operations. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/provider/base/IdpGroupMetaBaseSQLProvider.java | Base SQL provider for IdP group meta operations. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/IdpUserMetaSQLProviderFactory.java | Backend dispatch factory for IdP user SQL providers. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/IdpUserMetaMapper.java | MyBatis mapper for IdP user metadata table. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/IdpGroupUserRelSQLProviderFactory.java | Backend dispatch factory for group-user relation SQL providers. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/IdpGroupUserRelMapper.java | MyBatis mapper for group-user relation table. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/IdpGroupMetaSQLProviderFactory.java | Backend dispatch factory for IdP group SQL providers. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/storage/relational/mapper/IdpGroupMetaMapper.java | MyBatis mapper for IdP group metadata table. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/idp/basic/dto/responses/IdpUserResponse.java | Adds REST response wrapper + validation for built-in IdP user. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/idp/basic/dto/responses/IdpGroupResponse.java | Adds REST response wrapper + validation for built-in IdP group. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/idp/basic/dto/requests/UpdateGroupUsersRequest.java | Adds REST request DTO + validation for updating group users. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/idp/basic/dto/requests/ResetPasswordRequest.java | Adds REST request DTO + validation for resetting passwords (with redacted toString). |
| plugins/idp-basic/src/main/java/org/apache/gravitino/idp/basic/dto/requests/CreateUserRequest.java | Adds REST request DTO + validation for user creation (with redacted toString). |
| plugins/idp-basic/src/main/java/org/apache/gravitino/idp/basic/dto/requests/CreateGroupRequest.java | Adds REST request DTO + validation for group creation. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/idp/basic/dto/IdpUserDTO.java | Adds built-in IdP user DTO + builder validation. |
| plugins/idp-basic/src/main/java/org/apache/gravitino/idp/basic/dto/IdpGroupDTO.java | Adds built-in IdP group DTO + builder validation. |
| plugins/idp-basic/build.gradle.kts | Adds required module/library dependencies for the new IdP storage + DTO code and tests. |
Comment on lines
+82
to
+86
| public String softDeleteIdpUser( | ||
| @Param("userId") Long userId, @Param("deletedAt") Long deletedAt) { | ||
| return "UPDATE " | ||
| + IdpUserMetaMapper.IDP_USER_TABLE_NAME | ||
| + " SET deleted_at = #{deletedAt}," |
Comment on lines
+50
to
+54
| public String softDeleteIdpGroup( | ||
| @Param("groupId") Long groupId, @Param("deletedAt") Long deletedAt) { | ||
| return "UPDATE " | ||
| + IdpGroupMetaMapper.IDP_GROUP_TABLE_NAME | ||
| + " SET deleted_at = #{deletedAt}," |
Comment on lines
+91
to
+100
| public String softDeleteIdpGroupUsers( | ||
| @Param("groupId") Long groupId, | ||
| @Param("userIds") List<Long> userIds, | ||
| @Param("deletedAt") Long deletedAt) { | ||
| return "<script>" | ||
| + "UPDATE " | ||
| + IdpGroupUserRelMapper.IDP_GROUP_USER_REL_TABLE_NAME | ||
| + " SET deleted_at = #{deletedAt}," | ||
| + " current_version = current_version + 1," | ||
| + " last_version = last_version + 1" |
Comment on lines
+64
to
+70
| IdpUserPO tablePO = (IdpUserPO) o; | ||
| return Objects.equal(getUserId(), tablePO.getUserId()) | ||
| && Objects.equal(getUserName(), tablePO.getUserName()) | ||
| && Objects.equal(getPasswordHash(), tablePO.getPasswordHash()) | ||
| && Objects.equal(getCurrentVersion(), tablePO.getCurrentVersion()) | ||
| && Objects.equal(getLastVersion(), tablePO.getLastVersion()) | ||
| && Objects.equal(getDeletedAt(), tablePO.getDeletedAt()); |
Comment on lines
+59
to
+64
| IdpGroupPO tablePO = (IdpGroupPO) o; | ||
| return Objects.equal(getGroupId(), tablePO.getGroupId()) | ||
| && Objects.equal(getGroupName(), tablePO.getGroupName()) | ||
| && Objects.equal(getCurrentVersion(), tablePO.getCurrentVersion()) | ||
| && Objects.equal(getLastVersion(), tablePO.getLastVersion()) | ||
| && Objects.equal(getDeletedAt(), tablePO.getDeletedAt()); |
Comment on lines
+30
to
+38
| /** The service class for user metadata. It provides the basic database operations for user. */ | ||
| public class IdpUserMetaService { | ||
| private static final IdpUserMetaService INSTANCE = new IdpUserMetaService(); | ||
|
|
||
| public static IdpUserMetaService getInstance() { | ||
| return INSTANCE; | ||
| } | ||
|
|
||
| private IdpUserMetaService() {} |
Comment on lines
+30
to
+38
| /** The service class for group metadata. It provides the basic database operations for group. */ | ||
| public class IdpGroupMetaService { | ||
| private static final IdpGroupMetaService INSTANCE = new IdpGroupMetaService(); | ||
|
|
||
| public static IdpGroupMetaService getInstance() { | ||
| return INSTANCE; | ||
| } | ||
|
|
||
| private IdpGroupMetaService() {} |
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This was referenced May 11, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What changes were proposed in this pull request?
This PR moves the built-in IdP storage implementation classes from the original
coreaddition set into theplugins:idp-basicmodule, including relational POs, MyBatis mappers, SQL providers, and the corresponding plugin-local tests.Why are the changes needed?
The built-in IdP storage implementation should live with the
idp-basicplugin instead of being introduced directly as new implementation classes incore.Fix: #10960
Does this PR introduce any user-facing change?
No.
How was this patch tested?