From dfdd2b9e03b23de76cb34fe1111865ac0b5a9a80 Mon Sep 17 00:00:00 2001 From: Hasini Samarathunga Date: Tue, 19 May 2026 09:07:39 +0530 Subject: [PATCH] Skip claim config initialization for organizations --- .../mgt/DefaultClaimMetadataStore.java | 29 ++++++++++++++++++- 1 file changed, 28 insertions(+), 1 deletion(-) diff --git a/components/claim-mgt/org.wso2.carbon.identity.claim.metadata.mgt/src/main/java/org/wso2/carbon/identity/claim/metadata/mgt/DefaultClaimMetadataStore.java b/components/claim-mgt/org.wso2.carbon.identity.claim.metadata.mgt/src/main/java/org/wso2/carbon/identity/claim/metadata/mgt/DefaultClaimMetadataStore.java index f93cf3a731bb..cda6530457db 100644 --- a/components/claim-mgt/org.wso2.carbon.identity.claim.metadata.mgt/src/main/java/org/wso2/carbon/identity/claim/metadata/mgt/DefaultClaimMetadataStore.java +++ b/components/claim-mgt/org.wso2.carbon.identity.claim.metadata.mgt/src/main/java/org/wso2/carbon/identity/claim/metadata/mgt/DefaultClaimMetadataStore.java @@ -28,6 +28,8 @@ import org.wso2.carbon.identity.claim.metadata.mgt.util.ClaimConstants; import org.wso2.carbon.identity.claim.metadata.mgt.util.ClaimMetadataUtils; import org.wso2.carbon.identity.core.util.IdentityUtil; +import org.wso2.carbon.identity.organization.management.service.exception.OrganizationManagementException; +import org.wso2.carbon.identity.organization.management.service.util.OrganizationManagementUtil; import org.wso2.carbon.user.api.Claim; import org.wso2.carbon.user.api.ClaimMapping; import org.wso2.carbon.user.api.UserRealm; @@ -60,6 +62,14 @@ public static DefaultClaimMetadataStore getInstance(int tenantId) { public DefaultClaimMetadataStore(ClaimConfig claimConfig, int tenantId) { try { + /* + * Child organization tenants do not maintain their own claim metadata. Therefore, the per-tenant + * claim configuration initialization for the tenant must NOT run for child organization tenants. + */ + if (isOrganization(tenantId)) { + this.tenantId = tenantId; + return; + } ReadWriteClaimMetadataManager dbBasedClaimMetadataManager = new DBBasedClaimMetadataManager(); if (!skipClaimMetadataPersistence() && dbBasedClaimMetadataManager.getClaimDialects(tenantId).isEmpty()) { IdentityClaimManagementServiceDataHolder.getInstance().getClaimConfigInitDAO() @@ -68,10 +78,27 @@ public DefaultClaimMetadataStore(ClaimConfig claimConfig, int tenantId) { } catch (ClaimMetadataException e) { log.error("Error while retrieving claim dialects", e); } - this.tenantId = tenantId; } + /** + * Checks whether the given tenant corresponds to a child organization under a root organization. + * + * @param tenantId Tenant id to check. + * @return {@code true} if the tenant is a child organization, {@code false} otherwise. + */ + private boolean isOrganization(int tenantId) { + + try { + return OrganizationManagementUtil.isOrganization(tenantId); + } catch (OrganizationManagementException e) { + log.error("Error while checking whether tenant: " + tenantId + + " is a child organization during claim metadata store initialization. " + + "Proceeding with the default claim configuration initialization path.", e); + return false; + } + } + @Override public String[] getAllClaimUris() throws UserStoreException {