Skip to content

Commit 0c4ac50

Browse files
author
Thomas
committed
Bundle Test Case Finished
1 parent 92c2845 commit 0c4ac50

File tree

9 files changed

+364
-23
lines changed

9 files changed

+364
-23
lines changed

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/bundle/model/Bundle.java

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
import lombok.NoArgsConstructor;
77
import lombok.Setter;
88
import lombok.experimental.SuperBuilder;
9+
import org.apache.commons.lang3.BooleanUtils;
910
import org.lowcoder.sdk.models.HasIdAndAuditing;
1011
import org.springframework.data.mongodb.core.mapping.Document;
1112

@@ -32,4 +33,16 @@ public class Bundle extends HasIdAndAuditing {
3233

3334
private Map<String, Object> editingBundleDSL;
3435
private Map<String, Object> publishedBundleDSL;
36+
37+
public boolean isPublicToAll() {
38+
return BooleanUtils.toBooleanDefaultIfNull(publicToAll, false);
39+
}
40+
41+
public boolean isPublicToMarketplace() {
42+
return BooleanUtils.toBooleanDefaultIfNull(publicToMarketplace, false);
43+
}
44+
45+
public boolean agencyProfile() {
46+
return BooleanUtils.toBooleanDefaultIfNull(agencyProfile, false);
47+
}
3548
}

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/bundle/service/BundleService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,8 @@ public interface BundleService {
1717

1818
Mono<Bundle> findById(String id);
1919

20+
Mono<Bundle> findByIdWithoutDsl(String id);
21+
2022
Mono<Bundle> create(Bundle bundle, String userId);
2123

2224
Flux<Bundle> findByUserId(String bundleId);

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/bundle/service/BundleServiceImpl.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,16 @@ public Mono<Bundle> findById(String id) {
5252
.switchIfEmpty(Mono.error(new BizException(BizError.NO_RESOURCE_FOUND, "BUNDLE_NOT_FOUND", id)));
5353
}
5454

55+
@Override
56+
public Mono<Bundle> findByIdWithoutDsl(String id) {
57+
if (id == null) {
58+
return Mono.error(new BizException(BizError.INVALID_PARAMETER, "INVALID_PARAMETER", FieldName.ID));
59+
}
60+
61+
return repository.findById(id)
62+
.switchIfEmpty(Mono.error(new BizException(BizError.NO_RESOURCE_FOUND, "CANT_FIND_BUNDLE", id)));
63+
}
64+
5565
@Override
5666
public Mono<Bundle> create(Bundle newbundle, String visitorId) {
5767
return repository.save(newbundle)

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/service/ResourcePermissionService.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,8 @@ Mono<Map<String, Collection<ResourcePermission>>> getByResourceTypeAndResourceId
2323

2424
@NonEmptyMono
2525
Mono<List<ResourcePermission>> getByApplicationId(String applicationId);
26+
@NonEmptyMono
27+
Mono<List<ResourcePermission>> getByBundleId(String bundleId);
2628

2729
@NonEmptyMono
2830
Mono<List<ResourcePermission>> getByDataSourceId(String dataSourceId);

server/api-service/lowcoder-domain/src/main/java/org/lowcoder/domain/permission/service/ResourcePermissionServiceImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -57,6 +57,12 @@ public Mono<List<ResourcePermission>> getByApplicationId(String applicationId) {
5757
return getByResourceTypeAndResourceId(ResourceType.APPLICATION, applicationId);
5858
}
5959

60+
@Override
61+
@NonEmptyMono
62+
public Mono<List<ResourcePermission>> getByBundleId(String bundleId) {
63+
return getByResourceTypeAndResourceId(ResourceType.BUNDLE, bundleId);
64+
}
65+
6066
@Override
6167
@NonEmptyMono
6268
public Mono<List<ResourcePermission>> getByDataSourceId(String dataSourceId) {

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bundle/BundleApiService.java

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ public interface BundleApiService {
3131

3232
Mono<Boolean> restore(String bundleId);
3333
Flux<BundleInfoView> getRecycledBundles();
34+
Mono<BundlePermissionView> getBundlePermissions(String bundleId);
3435

3536
Mono<BundleInfoView> update(Bundle bundle);
3637
Mono<BundleInfoView> publish(String bundleId);
@@ -46,11 +47,11 @@ public interface BundleApiService {
4647
@Nonnull
4748
Mono<ResourcePermission> checkPermissionWithReadableErrorMsg(String bundleId, ResourceAction action);
4849

49-
Mono<Void> grantPermission(String bundleId, Set<String> userIds, Set<String> groupIds, ResourceRole role);
50+
Mono<Boolean> grantPermission(String bundleId, Set<String> userIds, Set<String> groupIds, ResourceRole role);
5051

51-
Mono<Void> updatePermission(String bundleId, String permissionId, ResourceRole role);
52+
Mono<Boolean> updatePermission(String bundleId, String permissionId, ResourceRole role);
5253

53-
Mono<Void> removePermission(String bundleId, String permissionId);
54+
Mono<Boolean> removePermission(String bundleId, String permissionId);
5455

5556
Mono<BundlePermissionView> getPermissions(String bundleId);
5657

server/api-service/lowcoder-server/src/main/java/org/lowcoder/api/bundle/BundleApiServiceImpl.java

Lines changed: 61 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33
import jakarta.annotation.Nonnull;
44
import jakarta.annotation.Nullable;
55
import lombok.RequiredArgsConstructor;
6-
import org.apache.commons.collections4.CollectionUtils;
76
import org.apache.commons.lang3.StringUtils;
87
import org.lowcoder.api.application.view.ApplicationInfoView;
98
import org.lowcoder.api.application.view.ApplicationPermissionView;
@@ -200,6 +199,42 @@ public Mono<Boolean> restore(String bundleId) {
200199
public Flux<BundleInfoView> getRecycledBundles() {
201200
return userHomeApiService.getAllAuthorisedBundles4CurrentOrgMember(BundleStatus.RECYCLED);
202201
}
202+
@Override
203+
public Mono<BundlePermissionView> getBundlePermissions(String bundleId) {
204+
205+
Mono<List<ResourcePermission>> bundlePermissions = resourcePermissionService.getByBundleId(bundleId).cache();
206+
207+
Mono<List<PermissionItemView>> groupPermissionPairsMono = bundlePermissions
208+
.flatMap(permissionHelper::getGroupPermissions);
209+
210+
Mono<List<PermissionItemView>> userPermissionPairsMono = bundlePermissions
211+
.flatMap(permissionHelper::getUserPermissions);
212+
213+
return checkCurrentUserBundlePermission(bundleId, READ_BUNDLES)
214+
.then(bundleService.findByIdWithoutDsl(bundleId))
215+
.delayUntil(bundle -> checkBundleStatus(bundle, BundleStatus.NORMAL))
216+
.flatMap(bundle -> {
217+
String creatorId = bundle.getCreatedBy();
218+
String orgId = bundle.getOrganizationId();
219+
220+
Mono<Organization> orgMono = organizationService.getById(orgId);
221+
return Mono.zip(groupPermissionPairsMono, userPermissionPairsMono, orgMono)
222+
.map(tuple -> {
223+
List<PermissionItemView> groupPermissionPairs = tuple.getT1();
224+
List<PermissionItemView> userPermissionPairs = tuple.getT2();
225+
Organization organization = tuple.getT3();
226+
return BundlePermissionView.builder()
227+
.groupPermissions(groupPermissionPairs)
228+
.userPermissions(userPermissionPairs)
229+
.creatorId(creatorId)
230+
.orgName(organization.getName())
231+
.publicToAll(bundle.isPublicToAll())
232+
.publicToMarketplace(bundle.isPublicToMarketplace())
233+
.agencyProfile(bundle.agencyProfile())
234+
.build();
235+
});
236+
});
237+
}
203238

204239
private Mono<Void> checkBundleStatus(String bundleId, BundleStatus expected) {
205240
return bundleService.findById(bundleId)
@@ -511,30 +546,38 @@ private Mono<Boolean> isCreator(String bundleId) {
511546
}
512547

513548
@Override
514-
public Mono<Void> grantPermission(String bundleId, Set<String> userIds, Set<String> groupIds, ResourceRole role) {
515-
if (CollectionUtils.isEmpty(userIds) && CollectionUtils.isEmpty(groupIds)) {
516-
return Mono.empty();
549+
public Mono<Boolean> grantPermission(String bundleId, Set<String> userIds, Set<String> groupIds, ResourceRole role) {
550+
if (userIds.isEmpty() && groupIds.isEmpty()) {
551+
return Mono.just(true);
517552
}
518-
return Mono.from(checkManagePermission(bundleId))
519-
.then(checkBundleExist(bundleId))
520-
.then(Mono.defer(() -> resourcePermissionService.insertBatchPermission(ResourceType.BUNDLE, bundleId, userIds, groupIds, role)))
521-
.then();
553+
554+
return checkCurrentUserBundlePermission(bundleId, MANAGE_BUNDLES)
555+
.then(bundleService.findByIdWithoutDsl(bundleId))
556+
.delayUntil(bundle -> checkBundleStatus(bundle, BundleStatus.NORMAL))
557+
.switchIfEmpty(deferredError(BizError.BUNDLE_NOT_EXIST, "BUNDLE_NOT_FOUND", bundleId))
558+
.then(resourcePermissionService.insertBatchPermission(ResourceType.BUNDLE, bundleId,
559+
userIds, groupIds, role))
560+
.thenReturn(true);
522561
}
523562

524563
@Override
525-
public Mono<Void> updatePermission(String bundleId, String permissionId, ResourceRole role) {
526-
return Mono.from(checkManagePermission(bundleId))
527-
.then(checkPermissionResource(permissionId, bundleId))
528-
.then(resourcePermissionService.updateRoleById(permissionId, role))
529-
.then();
564+
public Mono<Boolean> updatePermission(String bundleId, String permissionId, ResourceRole role) {
565+
return checkCurrentUserBundlePermission(bundleId, MANAGE_BUNDLES)
566+
.then(checkBundleStatus(bundleId, BundleStatus.NORMAL))
567+
.then(resourcePermissionService.getById(permissionId))
568+
.filter(permission -> StringUtils.equals(permission.getResourceId(), bundleId))
569+
.switchIfEmpty(deferredError(ILLEGAL_BUNDLE_PERMISSION_ID, "ILLEGAL_BUNDLE_PERMISSION_ID"))
570+
.then(resourcePermissionService.updateRoleById(permissionId, role));
530571
}
531572

532573
@Override
533-
public Mono<Void> removePermission(String bundleId, String permissionId) {
534-
return Mono.from(checkManagePermission(bundleId))
535-
.then(checkPermissionResource(permissionId, bundleId))
536-
.then(resourcePermissionService.removeById(permissionId))
537-
.then();
574+
public Mono<Boolean> removePermission(String bundleId, String permissionId) {
575+
return checkCurrentUserBundlePermission(bundleId, MANAGE_BUNDLES)
576+
.then(checkBundleStatus(bundleId, BundleStatus.NORMAL))
577+
.then(resourcePermissionService.getById(permissionId))
578+
.filter(permission -> StringUtils.equals(permission.getResourceId(), bundleId))
579+
.switchIfEmpty(deferredError(ILLEGAL_BUNDLE_PERMISSION_ID, "ILLEGAL_BUNDLE_PERMISSION_ID"))
580+
.then(resourcePermissionService.removeById(permissionId));
538581
}
539582

540583
private Mono<Void> checkPermissionResource(String permissionId, String bundleId) {

0 commit comments

Comments
 (0)