diff --git a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/event/RoleApi.java b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/event/RoleApi.java index 7ffc6f5ab1b..c83a00166a7 100644 --- a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/event/RoleApi.java +++ b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/event/RoleApi.java @@ -21,24 +21,33 @@ public class RoleApi { private static final String KEY_ROLE_NAME = "roleName"; private static final String KEY_PERMISSIONS = "permissions"; private static final String KEY_ID = "roleId"; + private static final String KEY_TRANSITIVE = "transitive"; public Role getRole(ApiContext ctx, UUID roleId) { return new Role(ctx.get(ROLE_URL + roleId.toString())); } public Role createRole(ApiContext ctx, String roleName) { + return createRole(ctx, roleName, /* transitive */ true); + } + + public Role createRole(ApiContext ctx, String roleName, boolean transitive) { final Map formParams = new HashMap<>(); formParams.put(KEY_ROLE_NAME, roleName); - return new Role(ctx.post(ROLE_URL, new HashMap<>(), formParams)); + final Map queryParams = new HashMap<>(); + queryParams.put(KEY_TRANSITIVE, Boolean.toString(transitive)); + return new Role(ctx.post(ROLE_URL, queryParams, formParams)); } public void deleteRole(ApiContext ctx, UUID roleId) { ctx.delete(ROLE_URL + roleId.toString()); } - public String updateRole(ApiContext ctx, UUID roleId, Iterable permissionStrings, String roleName) { + public String updateRole(ApiContext ctx, UUID roleId, Iterable permissionStrings, String roleName, + boolean transitive) { final JSONObject json = new JSONObject(); json.put(KEY_ROLE_NAME, roleName); + json.put(KEY_TRANSITIVE, transitive); final JSONArray permissionArray = new JSONArray(); for (String permission : permissionStrings) { permissionArray.add(permission); @@ -61,6 +70,10 @@ public class RoleApi { return UUID.fromString(get(KEY_ID)); } + public boolean isTransitive() { + return get(KEY_TRANSITIVE); + } + public Iterable getPermissions() { JSONArray array = get(KEY_PERMISSIONS); Collection col = new ArrayList<>(); diff --git a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/RoleApiTest.java b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/RoleApiTest.java index b01f66021b0..545c7b4de3b 100644 --- a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/RoleApiTest.java +++ b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/RoleApiTest.java @@ -3,6 +3,7 @@ package com.sap.sailing.selenium.api.test; import static com.sap.sailing.selenium.api.core.ApiContext.SECURITY_CONTEXT; import static com.sap.sailing.selenium.api.core.ApiContext.createAdminApiContext; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; @@ -90,7 +91,8 @@ public class RoleApiTest extends AbstractSeleniumTest { permissions.add("BOAT:READ"); final String updatedRoleName = roleCreated.getName() + "_changed"; - final String roleUpdate = roleApi.updateRole(adminCtx, roleCreated.getId(), permissions, updatedRoleName); + final String roleUpdate = roleApi.updateRole(adminCtx, roleCreated.getId(), permissions, updatedRoleName, + roleCreated.isTransitive()); assertNull("Empty string expected.", roleUpdate); @@ -107,4 +109,30 @@ public class RoleApiTest extends AbstractSeleniumTest { roleApi.deleteRole(adminCtx, roleCreated.getId()); } + + @Test + public void testUpdateRoleTransitive() { + final ApiContext adminCtx = createAdminApiContext(getContextRoot(), SECURITY_CONTEXT); + final String testRoleName1 = "test role transitive_1"; + final Role roleCreated1 = roleApi.createRole(adminCtx, testRoleName1); + assertTrue("role1 should be transitive by default", roleCreated1.isTransitive()); + + final String testRoleName2 = "test role transitive_2"; + final Role roleCreated2 = roleApi.createRole(adminCtx, testRoleName2, /* transitive */ true); + assertTrue("role2 should be transitive by parameter", roleCreated2.isTransitive()); + + final String testRoleName3 = "test role transitive_3"; + final Role roleCreated3 = roleApi.createRole(adminCtx, testRoleName3, /* transitive */ false); + assertFalse("role3 should be not transitive by parameter", roleCreated3.isTransitive()); + + assertNull("updateRole shouldn't return something", roleApi.updateRole(adminCtx, roleCreated1.getId(), + roleCreated1.getPermissions(), roleCreated1.getName(), false)); + final Role roleUpdated1 = roleApi.getRole(adminCtx, roleCreated1.getId()); + assertFalse("role1 should be non-transitive after update", roleUpdated1.isTransitive()); + + assertNull("updateRole shouldn't return something", roleApi.updateRole(adminCtx, roleCreated3.getId(), + roleCreated3.getPermissions(), roleCreated3.getName(), true)); + final Role roleUpdated3 = roleApi.getRole(adminCtx, roleCreated3.getId()); + assertTrue("role3 should be transitive after update", roleUpdated3.isTransitive()); + } } diff --git a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/UserGroupApiTest.java b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/UserGroupApiTest.java index 8f4e88c7cdb..5d7b05e5f9e 100644 --- a/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/UserGroupApiTest.java +++ b/java/com.sap.sailing.selenium.test/src/com/sap/sailing/selenium/api/test/UserGroupApiTest.java @@ -92,7 +92,7 @@ public class UserGroupApiTest extends AbstractSeleniumTest { // add new role to group with admin user final Role createdRole = roleApi.createRole(adminCtx, "My-Epic-Role"); - roleApi.updateRole(adminCtx, createdRole.getId(), Arrays.asList("*"), createdRole.getName()); + roleApi.updateRole(adminCtx, createdRole.getId(), Arrays.asList("*"), createdRole.getName(), createdRole.isTransitive()); userGroupApi.addRoleToGroup(adminCtx, userGroupCreated.getGroupId(), createdRole.getId(), false); try { diff --git a/java/com.sap.sse.security/src/com/sap/sse/security/jaxrs/api/RoleResource.java b/java/com.sap.sse.security/src/com/sap/sse/security/jaxrs/api/RoleResource.java index d4ac617666a..192633ae700 100644 --- a/java/com.sap.sse.security/src/com/sap/sse/security/jaxrs/api/RoleResource.java +++ b/java/com.sap.sse.security/src/com/sap/sse/security/jaxrs/api/RoleResource.java @@ -43,7 +43,7 @@ public class RoleResource extends AbstractSecurityResource { @POST @Produces("application/json;charset=UTF-8") public Response createRole(@FormParam(KEY_ROLE_NAME) String roleName, - @QueryParam("KEY_TRANSITIVE") @DefaultValue("true") boolean transitive) { + @QueryParam(KEY_TRANSITIVE) @DefaultValue("true") boolean transitive) { final String roleDefinitionIdAsString = UUID.randomUUID().toString(); final RoleDefinition role = getService().setOwnershipWithoutCheckPermissionForObjectCreationAndRevertOnError( SecuredSecurityTypes.ROLE_DEFINITION, new TypeRelativeObjectIdentifier(roleDefinitionIdAsString), @@ -142,6 +142,10 @@ public class RoleResource extends AbstractSecurityResource { if (roleName != null) { roleDefinition.setName(roleName); } + final Boolean transitive = (Boolean) body.get(KEY_TRANSITIVE); + if (transitive != null) { + roleDefinition.setTransitive(transitive); + } getService().updateRoleDefinition(roleDefinition); resp = Response.ok().build(); }