From e8e6eb0465020e5510abd460beeb3079c812782f Mon Sep 17 00:00:00 2001 From: Shubham Saxena <136057998+shubham7saxena7@users.noreply.github.com> Date: Thu, 28 Sep 2023 20:14:07 +0530 Subject: [PATCH] feat: add roles and groups to userProfileDTO and set the message (#27250) fixes: https://github.com/appsmithorg/appsmith/issues/24606 --- .../server/constants/AccessControlConstants.java | 5 +++++ .../constants/ce/AccessControlConstantsCE.java | 6 ++++++ .../server/dtos/ce/UserProfileCE_DTO.java | 5 +++++ .../server/services/ce/UserServiceCEImpl.java | 16 +++++++++++++--- .../server/services/UserServiceTest.java | 9 +++++++++ 5 files changed, 38 insertions(+), 3 deletions(-) create mode 100644 app/server/appsmith-server/src/main/java/com/appsmith/server/constants/AccessControlConstants.java create mode 100644 app/server/appsmith-server/src/main/java/com/appsmith/server/constants/ce/AccessControlConstantsCE.java diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/AccessControlConstants.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/AccessControlConstants.java new file mode 100644 index 0000000000..8b536b981b --- /dev/null +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/AccessControlConstants.java @@ -0,0 +1,5 @@ +package com.appsmith.server.constants; + +import com.appsmith.server.constants.ce.AccessControlConstantsCE; + +public class AccessControlConstants extends AccessControlConstantsCE {} diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/ce/AccessControlConstantsCE.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/ce/AccessControlConstantsCE.java new file mode 100644 index 0000000000..15cb232030 --- /dev/null +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/constants/ce/AccessControlConstantsCE.java @@ -0,0 +1,6 @@ +package com.appsmith.server.constants.ce; + +public class AccessControlConstantsCE { + public static final String UPGRADE_TO_BUSINESS_EDITION_TO_ACCESS_ROLES_AND_GROUPS_FOR_CONDITIONAL_BUSINESS_LOGIC = + "Upgrade to business edition to access roles and groups for conditional business logic"; +} diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/ce/UserProfileCE_DTO.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/ce/UserProfileCE_DTO.java index bc951a12bf..66fc913710 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/ce/UserProfileCE_DTO.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/dtos/ce/UserProfileCE_DTO.java @@ -3,6 +3,7 @@ package com.appsmith.server.dtos.ce; import com.fasterxml.jackson.annotation.JsonProperty; import lombok.Data; +import java.util.List; import java.util.Set; @Data @@ -43,6 +44,10 @@ public class UserProfileCE_DTO { boolean enableTelemetry = false; + List roles; + + List groups; + public boolean isAccountNonExpired() { return this.isEnabled; } diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/UserServiceCEImpl.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/UserServiceCEImpl.java index 36558c5363..b167206b96 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/UserServiceCEImpl.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/services/ce/UserServiceCEImpl.java @@ -88,6 +88,7 @@ import java.util.UUID; import java.util.regex.Pattern; import static com.appsmith.server.acl.AclPermission.MANAGE_USERS; +import static com.appsmith.server.constants.AccessControlConstants.UPGRADE_TO_BUSINESS_EDITION_TO_ACCESS_ROLES_AND_GROUPS_FOR_CONDITIONAL_BUSINESS_LOGIC; import static com.appsmith.server.helpers.RedirectHelper.DEFAULT_REDIRECT_URL; import static com.appsmith.server.helpers.ValidationUtils.LOGIN_PASSWORD_MAX_LENGTH; import static com.appsmith.server.helpers.ValidationUtils.LOGIN_PASSWORD_MIN_LENGTH; @@ -731,7 +732,7 @@ public class UserServiceCEImpl extends BaseService userFromDbMono, userDataService.getForCurrentUser().defaultIfEmpty(new UserData()), isSuperUserMono) - .map(tuple -> { + .flatMap(tuple -> { final boolean isUsersEmpty = Boolean.TRUE.equals(tuple.getT1()); final User userFromDb = tuple.getT2(); final UserData userData = tuple.getT3(); @@ -755,11 +756,20 @@ public class UserServiceCEImpl extends BaseService commonConfig.isCloudHosting() ? true : userData.isIntercomConsentGiven()); profile.setSuperUser(isSuperUser); profile.setConfigurable(!StringUtils.isEmpty(commonConfig.getEnvFilePath())); - - return profile; + return setRolesAndGroups(profile, userFromDb, true, commonConfig.isCloudHosting()); }); } + protected Mono setRolesAndGroups( + UserProfileDTO profile, User user, boolean showRolesAndGroups, boolean isCloudHosting) { + profile.setRoles( + List.of(UPGRADE_TO_BUSINESS_EDITION_TO_ACCESS_ROLES_AND_GROUPS_FOR_CONDITIONAL_BUSINESS_LOGIC)); + profile.setGroups( + List.of(UPGRADE_TO_BUSINESS_EDITION_TO_ACCESS_ROLES_AND_GROUPS_FOR_CONDITIONAL_BUSINESS_LOGIC)); + + return Mono.just(profile); + } + private EmailTokenDTO parseValueFromEncryptedToken(String encryptedToken) { String decryptString = encryptionService.decryptString(encryptedToken); List nameValuePairs = URLEncodedUtils.parse(decryptString, StandardCharsets.UTF_8); diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/UserServiceTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/UserServiceTest.java index 175e7ac796..80007f6b0f 100644 --- a/app/server/appsmith-server/src/test/java/com/appsmith/server/services/UserServiceTest.java +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/services/UserServiceTest.java @@ -60,6 +60,7 @@ import java.util.Set; import static com.appsmith.server.acl.AclPermission.MANAGE_USERS; import static com.appsmith.server.acl.AclPermission.RESET_PASSWORD_USERS; +import static com.appsmith.server.constants.AccessControlConstants.UPGRADE_TO_BUSINESS_EDITION_TO_ACCESS_ROLES_AND_GROUPS_FOR_CONDITIONAL_BUSINESS_LOGIC; import static com.appsmith.server.constants.Appsmith.DEFAULT_ORIGIN_HEADER; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.jupiter.api.Assertions.assertEquals; @@ -495,6 +496,14 @@ public class UserServiceTest { .assertNext(userProfileDTO -> { assertNotNull(userProfileDTO); assertThat(userProfileDTO.isIntercomConsentGiven()).isTrue(); + assertEquals( + List.of( + UPGRADE_TO_BUSINESS_EDITION_TO_ACCESS_ROLES_AND_GROUPS_FOR_CONDITIONAL_BUSINESS_LOGIC), + userProfileDTO.getGroups()); + assertEquals( + List.of( + UPGRADE_TO_BUSINESS_EDITION_TO_ACCESS_ROLES_AND_GROUPS_FOR_CONDITIONAL_BUSINESS_LOGIC), + userProfileDTO.getRoles()); }) .verifyComplete(); }