diff --git a/app/server/appsmith-server/src/main/java/com/appsmith/server/acl/AclPermission.java b/app/server/appsmith-server/src/main/java/com/appsmith/server/acl/AclPermission.java index 611efb1e7a..371e24b12a 100644 --- a/app/server/appsmith-server/src/main/java/com/appsmith/server/acl/AclPermission.java +++ b/app/server/appsmith-server/src/main/java/com/appsmith/server/acl/AclPermission.java @@ -3,8 +3,11 @@ package com.appsmith.server.acl; import com.appsmith.external.models.BaseDomain; import com.appsmith.external.models.Datasource; import com.appsmith.server.domains.Action; +import com.appsmith.server.domains.ActionCollection; import com.appsmith.server.domains.Application; import com.appsmith.server.domains.Config; +import com.appsmith.server.domains.NewAction; +import com.appsmith.server.domains.NewPage; import com.appsmith.server.domains.Page; import com.appsmith.server.domains.PermissionGroup; import com.appsmith.server.domains.Tenant; @@ -134,4 +137,21 @@ public enum AclPermission { } return null; } + + public static boolean isPermissionForEntity(AclPermission aclPermission, Class clazz) { + Class entityClass = clazz; + /* + * Action class has been deprecated, and we have started using NewAction class instead. + * Page class has been deprecated, and we have started using NewPage class instead. + * NewAction and ActionCollection are similar entities w.r.t. AclPermissions. + * Hence, whenever we want to check for any Permission w.r.t. NewAction or Action Collection, we use Action, and + * whenever we want to check for any Permission w.r.t. NewPage, we use Page. + */ + if (entityClass.equals(NewAction.class) || entityClass.equals(ActionCollection.class)) { + entityClass = Action.class; + } else if (entityClass.equals(NewPage.class)) { + entityClass = Page.class; + } + return aclPermission.getEntity().equals(entityClass); + } } diff --git a/app/server/appsmith-server/src/test/java/com/appsmith/server/acl/AclPermissionTest.java b/app/server/appsmith-server/src/test/java/com/appsmith/server/acl/AclPermissionTest.java new file mode 100644 index 0000000000..7e44b54384 --- /dev/null +++ b/app/server/appsmith-server/src/test/java/com/appsmith/server/acl/AclPermissionTest.java @@ -0,0 +1,34 @@ +package com.appsmith.server.acl; + +import com.appsmith.server.domains.Action; +import com.appsmith.server.domains.ActionCollection; +import com.appsmith.server.domains.Application; +import com.appsmith.server.domains.NewAction; +import com.appsmith.server.domains.NewPage; +import com.appsmith.server.domains.Page; +import com.appsmith.server.domains.Theme; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.springframework.test.context.junit.jupiter.SpringExtension; + +import static org.assertj.core.api.Assertions.assertThat; + +@ExtendWith(SpringExtension.class) +class AclPermissionTest { + + @Test + void testIsPermissionForEntity() { + assertThat(AclPermission.isPermissionForEntity(AclPermission.READ_APPLICATIONS, Application.class)).isTrue(); + assertThat(AclPermission.isPermissionForEntity(AclPermission.READ_APPLICATIONS, Theme.class)).isFalse(); + + + // Assert that Action related Permission should return True, when checked against Action, NewAction and Action Collection. + assertThat(AclPermission.isPermissionForEntity(AclPermission.MANAGE_ACTIONS, Action.class)).isTrue(); + assertThat(AclPermission.isPermissionForEntity(AclPermission.MANAGE_ACTIONS, NewAction.class)).isTrue(); + assertThat(AclPermission.isPermissionForEntity(AclPermission.MANAGE_ACTIONS, ActionCollection.class)).isTrue(); + + // Assert that Page related Permission should return True, when checked against Page and NewPage. + assertThat(AclPermission.isPermissionForEntity(AclPermission.MANAGE_PAGES, Page.class)).isTrue(); + assertThat(AclPermission.isPermissionForEntity(AclPermission.MANAGE_PAGES, NewPage.class)).isTrue(); + } +} \ No newline at end of file