Skip to content

Commit 8056315

Browse files
Thomasrludomikula
Thomasr
authored andcommitted
add superadmin to all org when startup
1 parent 042c705 commit 8056315

File tree

6 files changed

+58
-2
lines changed

6 files changed

+58
-2
lines changed

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/repository/OrganizationRepository.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ public interface OrganizationRepository extends ReactiveMongoRepository<Organiza
1717
Flux<Organization> findByIdInAndState(Collection<String> id, OrganizationState state);
1818
Flux<Organization> findByGidInAndState(Collection<String> gid, OrganizationState state);
1919
Flux<Organization> findByGid(String gid);
20+
Flux<Organization> findByState(OrganizationState state);
2021

2122
Mono<Organization> findByIdAndState(String id, OrganizationState state);
2223
Mono<Organization> findByGidAndState(String gid, OrganizationState state);

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrgMemberService.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,10 @@ public interface OrgMemberService {
5252

5353
Mono<Void> bulkAddMember(String orgId, Collection<String> userIds, MemberRole memberRole);
5454

55+
Mono<Void> bulkAddToOrgs(Collection<String> orgIds, String userId, MemberRole memberRole);
56+
57+
Mono<Void> addToAllOrgAsAdminIfNot(String userId);
58+
5559
Mono<Boolean> bulkRemoveMember(String orgId, Collection<String> userIds);
5660

5761
record UserOrgMemberInfo(OrgMember currentOrgMember, List<OrgMember> orgMembers) {

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrgMemberServiceImpl.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import org.lowcoder.domain.group.service.GroupMemberService;
99
import org.lowcoder.domain.group.service.GroupService;
1010
import org.lowcoder.domain.organization.model.*;
11+
import org.lowcoder.domain.user.model.User;
1112
import org.lowcoder.infra.annotation.PossibleEmptyMono;
1213
import org.lowcoder.infra.birelation.BiRelation;
1314
import org.lowcoder.infra.birelation.BiRelationService;
@@ -16,6 +17,7 @@
1617
import org.lowcoder.sdk.config.CommonConfig;
1718
import org.lowcoder.sdk.config.CommonConfig.Workspace;
1819
import org.lowcoder.sdk.constants.WorkspaceMode;
20+
import org.lowcoder.sdk.models.HasIdAndAuditing;
1921
import org.springframework.context.annotation.Lazy;
2022
import org.springframework.data.domain.PageRequest;
2123
import org.springframework.stereotype.Service;
@@ -26,6 +28,7 @@
2628
import java.util.HashSet;
2729
import java.util.List;
2830
import java.util.Map;
31+
import java.util.stream.Collectors;
2932

3033
import static org.lowcoder.infra.birelation.BiRelationBizType.ORG_MEMBER;
3134

@@ -243,6 +246,29 @@ public Mono<Void> bulkAddMember(String orgId, Collection<String> userIds, Member
243246
.then(bulkAddToAllUserGroup(orgId, userIds));
244247
}
245248

249+
@Override
250+
public Mono<Void> bulkAddToOrgs(Collection<String> orgIds, String userId, MemberRole memberRole) {
251+
List<BiRelation> biRelations = (List<BiRelation>)orgIds.stream()
252+
.map(orgId -> BiRelation.builder()
253+
.bizType(ORG_MEMBER)
254+
.sourceId(orgId)
255+
.targetId(userId)
256+
.relation(memberRole.getValue())
257+
.state(OrgMemberState.NORMAL.getValue())
258+
.build())
259+
.toList();
260+
return biRelationService.batchAddBiRelation(biRelations)
261+
.then(bulkAddToAllUserGroup(orgIds, userId, memberRole));
262+
}
263+
264+
@Override
265+
public Mono<Void> addToAllOrgAsAdminIfNot(String userId) {
266+
List<String> oldOrgIds = getAllActiveOrgs(userId).map(OrgMember::getOrgId).toStream().toList();
267+
List<String> allOrgIds = organizationService.getAllActive().map(HasIdAndAuditing::getId).toStream().toList();
268+
List<String> newOrgIds = allOrgIds.stream().filter(orgId -> !oldOrgIds.contains(orgId)).toList();
269+
return bulkAddToOrgs(newOrgIds, userId, MemberRole.SUPER_ADMIN).then();
270+
}
271+
246272
private Mono<Void> bulkAddToAllUserGroup(String orgId, Collection<String> userIds) {
247273
return groupService.getAllUsersGroup(orgId)
248274
.map(group -> userIds.stream()
@@ -252,6 +278,12 @@ private Mono<Void> bulkAddToAllUserGroup(String orgId, Collection<String> userId
252278
.then();
253279
}
254280

281+
private Mono<Void> bulkAddToAllUserGroup(Collection<String> orgIds, String userId, MemberRole memberRole) {
282+
return Mono.just(orgIds.stream().map(orgId -> groupService.getAllUsersGroup(orgId)
283+
.flatMap(group -> groupMemberService.addMember(orgId, group.getId(), userId, memberRole)).block()).toList())
284+
.then();
285+
}
286+
255287
@Override
256288
public Mono<Boolean> bulkRemoveMember(String orgId, Collection<String> userIds) {
257289
List<Document> filters = userIds.stream()

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ public interface OrganizationService {
3131

3232
@NonEmptyMono
3333
Flux<Organization> getByIds(Collection<String> ids);
34+
@NonEmptyMono
35+
Flux<Organization> getAllActive();
3436

3537
Mono<OrganizationCommonSettings> getOrgCommonSettings(String orgId);
3638

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/organization/service/OrganizationServiceImpl.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -184,6 +184,11 @@ public Flux<Organization> getByIds(Collection<String> ids) {
184184
return repository.findByIdInAndState(ids, ACTIVE);
185185
}
186186

187+
@Override
188+
public Flux<Organization> getAllActive() {
189+
return repository.findByState(ACTIVE);
190+
}
191+
187192
@Override
188193
public Mono<Boolean> uploadLogo(String organizationId, Part filePart) {
189194

server/api-service/lowcoder-server/src/main/java/org/lowcoder/runner/migrations/job/AddSuperAdminUserImpl.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,21 @@
77
import org.lowcoder.api.util.RandomPasswordGeneratorConfig;
88
import org.lowcoder.domain.authentication.context.AuthRequestContext;
99
import org.lowcoder.domain.authentication.context.FormAuthRequestContext;
10+
import org.lowcoder.domain.organization.model.MemberRole;
11+
import org.lowcoder.domain.organization.model.OrgMember;
12+
import org.lowcoder.domain.organization.service.OrgMemberService;
13+
import org.lowcoder.domain.organization.service.OrganizationService;
1014
import org.lowcoder.domain.user.model.AuthUser;
15+
import org.lowcoder.domain.user.model.User;
1116
import org.lowcoder.domain.user.service.UserService;
1217
import org.lowcoder.sdk.config.CommonConfig;
18+
import org.lowcoder.sdk.models.HasIdAndAuditing;
1319
import org.springframework.stereotype.Component;
1420
import reactor.core.publisher.Mono;
1521

22+
import java.util.ArrayList;
23+
import java.util.List;
24+
1625
import static org.lowcoder.domain.authentication.AuthenticationService.DEFAULT_AUTH_CONFIG;
1726

1827
@RequiredArgsConstructor
@@ -23,7 +32,9 @@ public class AddSuperAdminUserImpl implements AddSuperAdminUser {
2332
private final AuthenticationApiServiceImpl authenticationApiService;
2433
private final CommonConfig commonConfig;
2534
private final UserService userService;
26-
35+
private final OrgMemberService orgMemberService;
36+
private final OrganizationService organizationService;
37+
2738
@Override
2839
public void addOrUpdateSuperAdmin() {
2940

@@ -37,8 +48,9 @@ public void addOrUpdateSuperAdmin() {
3748
return Mono.empty();
3849
})
3950
.delayUntil(user -> userService.setPassword(user.getId(), ((FormAuthRequestContext)authUser.getAuthContext()).getPassword()))
51+
.delayUntil(user -> orgMemberService.addToAllOrgAsAdminIfNot(user.getId()))
4052
.block();
41-
}
53+
}
4254

4355
private AuthUser formulateAuthUser() {
4456
String username = formulateUserName();

0 commit comments

Comments
 (0)