From 4f36ff4c25672cb97d13992ad923d13f51328d39 Mon Sep 17 00:00:00 2001
From: Thomasr <techninjas514@thecoderagency.com>
Date: Mon, 21 Apr 2025 16:54:28 -0400
Subject: [PATCH] Fixed organizationByEmail endpoint

---
 .../usermanagement/OrganizationController.java | 18 +++++++++++++++---
 1 file changed, 15 insertions(+), 3 deletions(-)

diff --git a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrganizationController.java b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrganizationController.java
index 6a8bb62ea3..00cc33779a 100644
--- a/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrganizationController.java
+++ b/server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/usermanagement/OrganizationController.java
@@ -62,11 +62,23 @@ public Mono<PageResponseView<?>> getOrganizationByUser(@PathVariable String emai
                                                            @RequestParam(required = false, defaultValue = "0") Integer pageSize) {
         Flux<OrgView> flux;
         if (commonConfig.getWorkspace().getMode() == WorkspaceMode.SAAS) {
-            flux = userService.findByEmailDeep(email).flux().flatMap(user -> orgMemberService.getAllActiveOrgs(user.getId()))
+            flux = userService.findByEmailDeep(email).flux()
+                    .flatMap(user -> orgMemberService.getAllActiveOrgs(user.getId()))
                     .flatMap(orgMember -> organizationService.getById(orgMember.getOrgId()))
-                    .map(OrgView::new).cache();
+                    .map(OrgView::new)
+                    .cache();
         } else {
-            flux = organizationService.getOrganizationInEnterpriseMode().flux().map(OrgView::new).cache();
+            // Not SAAS: check if user exists and is a member of the org
+            flux = userService.findByEmailDeep(email)
+                    .flatMapMany(user -> 
+                        organizationService.getOrganizationInEnterpriseMode().flux()
+                            .flatMap(org -> 
+                                orgMemberService.getOrgMember(org.getId(), user.getId())
+                                    .filter(orgMember -> !orgMember.isInvalid())
+                                    .map(__ -> new OrgView(org))
+                            )
+                    )
+                    .cache();
         }
         var newflux = flux.sort((OrgView o1, OrgView o2) -> {
             if (o1.getOrgName() == null || o2.getOrgName() == null) {