diff --git a/src/main/java/net/siegeln/cameleer/saas/config/MeController.java b/src/main/java/net/siegeln/cameleer/saas/config/MeController.java index de6ab4a..1ed4276 100644 --- a/src/main/java/net/siegeln/cameleer/saas/config/MeController.java +++ b/src/main/java/net/siegeln/cameleer/saas/config/MeController.java @@ -15,12 +15,12 @@ import java.util.Map; @RestController public class MeController { - private final LogtoManagementClient logtoClient; private final TenantService tenantService; + private final LogtoManagementClient logtoClient; - public MeController(LogtoManagementClient logtoClient, TenantService tenantService) { - this.logtoClient = logtoClient; + public MeController(TenantService tenantService, LogtoManagementClient logtoClient) { this.tenantService = tenantService; + this.logtoClient = logtoClient; } @GetMapping("/api/me") @@ -32,19 +32,35 @@ public class MeController { Jwt jwt = jwtAuth.getToken(); String userId = jwt.getSubject(); - List globalRoles = logtoClient.getUserRoles(userId); - boolean isPlatformAdmin = globalRoles.contains("platform-admin"); + String orgId = jwt.getClaimAsString("organization_id"); + + List globalRoles = jwt.getClaimAsStringList("roles"); + boolean isPlatformAdmin = globalRoles != null && globalRoles.contains("platform-admin"); + + if (orgId != null) { + var tenant = tenantService.getByLogtoOrgId(orgId).orElse(null); + List> tenants = tenant != null + ? List.of(Map.of( + "id", tenant.getId().toString(), + "name", tenant.getName(), + "slug", tenant.getSlug(), + "logtoOrgId", tenant.getLogtoOrgId())) + : List.of(); + + return ResponseEntity.ok(Map.of( + "userId", userId, + "isPlatformAdmin", isPlatformAdmin, + "tenants", tenants)); + } List> logtoOrgs = logtoClient.getUserOrganizations(userId); - List> tenants = logtoOrgs.stream() .map(org -> tenantService.getByLogtoOrgId(org.get("id")) .map(t -> Map.of( "id", t.getId().toString(), "name", t.getName(), "slug", t.getSlug(), - "logtoOrgId", t.getLogtoOrgId() - )) + "logtoOrgId", t.getLogtoOrgId())) .orElse(null)) .filter(t -> t != null) .toList(); @@ -52,7 +68,6 @@ public class MeController { return ResponseEntity.ok(Map.of( "userId", userId, "isPlatformAdmin", isPlatformAdmin, - "tenants", tenants - )); + "tenants", tenants)); } }