add unixuser prototype as preparation for testability of grants
This commit is contained in:
@ -12,7 +12,7 @@ import org.springframework.boot.test.web.server.LocalServerPort;
|
||||
|
||||
import javax.persistence.EntityManager;
|
||||
|
||||
import static org.hamcrest.Matchers.is;
|
||||
import static org.hamcrest.Matchers.*;
|
||||
|
||||
@SpringBootTest(
|
||||
webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT,
|
||||
@ -50,14 +50,15 @@ class RbacRoleControllerAcceptanceTest {
|
||||
.then().assertThat()
|
||||
.statusCode(200)
|
||||
.contentType("application/json")
|
||||
.body("[0].roleName", is("customer#aaa.owner"))
|
||||
.body("[1].roleName", is("customer#aaa.admin"))
|
||||
.body("[0].roleName", is("customer#aaa.admin"))
|
||||
.body("[1].roleName", is("customer#aaa.owner"))
|
||||
.body("[2].roleName", is("customer#aaa.tenant"))
|
||||
.body("[3].roleName", is("package#aaa00.owner"))
|
||||
.body("[4].roleName", is("package#aaa00.tenant"))
|
||||
// ...
|
||||
.body("[36].roleName", is("global#hostsharing.admin"))
|
||||
.body( "size()", is(37));
|
||||
.body("", hasItem(hasEntry("roleName", "global#hostsharing.admin")))
|
||||
.body("", hasItem(hasEntry("roleName", "customer#aab.admin")))
|
||||
.body("", hasItem(hasEntry("roleName", "package#aab00.admin")))
|
||||
.body("", hasItem(hasEntry("roleName", "unixuser#aab00-aaaa.owner")))
|
||||
.body( "size()", is(73)); // increases with new test data
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
@ -69,17 +70,18 @@ class RbacRoleControllerAcceptanceTest {
|
||||
RestAssured
|
||||
.given()
|
||||
.header("current-user", "mike@hostsharing.net")
|
||||
.header("assumed-roles", "package#aaa00.admin")
|
||||
.header("assumed-roles", "package#aab00.admin")
|
||||
.port(port)
|
||||
.when()
|
||||
.get("http://localhost/api/rbac-roles")
|
||||
.then().assertThat()
|
||||
.statusCode(200)
|
||||
.contentType("application/json")
|
||||
.body("[0].roleName", is("customer#aaa.tenant"))
|
||||
.body("[1].roleName", is("package#aaa00.admin"))
|
||||
.body("[2].roleName", is("package#aaa00.tenant"))
|
||||
.body("size()", is(3));
|
||||
.body("[0].roleName", is("customer#aab.tenant"))
|
||||
.body("[1].roleName", is("package#aab00.admin"))
|
||||
.body("[2].roleName", is("package#aab00.tenant"))
|
||||
.body("[3].roleName", is("unixuser#aab00-aaaa.admin"))
|
||||
.body("size()", is(7)); // increases with new test data
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
@ -90,17 +92,18 @@ class RbacRoleControllerAcceptanceTest {
|
||||
// @formatter:off
|
||||
RestAssured
|
||||
.given()
|
||||
.header("current-user", "aaa00@aaa.example.com")
|
||||
.header("current-user", "aac00@aac.example.com")
|
||||
.port(port)
|
||||
.when()
|
||||
.get("http://localhost/api/rbac-roles")
|
||||
.then().assertThat()
|
||||
.statusCode(200)
|
||||
.contentType("application/json")
|
||||
.body("[0].roleName", is("customer#aaa.tenant"))
|
||||
.body("[1].roleName", is("package#aaa00.admin"))
|
||||
.body("[2].roleName", is("package#aaa00.tenant"))
|
||||
.body("size()", is(3));;
|
||||
.body("[0].roleName", is("customer#aac.tenant"))
|
||||
.body("[1].roleName", is("package#aac00.admin"))
|
||||
.body("[2].roleName", is("package#aac00.tenant"))
|
||||
.body("[3].roleName", is("unixuser#aac00-aaaa.admin"))
|
||||
.body("size()", is(7)); // increases with new test data
|
||||
// @formatter:on
|
||||
}
|
||||
|
||||
|
@ -59,7 +59,7 @@ class RbacRoleRepositoryIntegrationTest {
|
||||
final var result = rbacRoleRepository.findAll();
|
||||
|
||||
// then
|
||||
exactlyTheseRbacRolesAreReturned(result, ALL_TEST_DATA_ROLES);
|
||||
allTheseRbacRolesAreReturned(result, ALL_TEST_DATA_ROLES);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -72,7 +72,7 @@ class RbacRoleRepositoryIntegrationTest {
|
||||
final var result = rbacRoleRepository.findAll();
|
||||
|
||||
then:
|
||||
exactlyTheseRbacRolesAreReturned(result, ALL_TEST_DATA_ROLES);
|
||||
allTheseRbacRolesAreReturned(result, ALL_TEST_DATA_ROLES);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -84,13 +84,33 @@ class RbacRoleRepositoryIntegrationTest {
|
||||
final var result = rbacRoleRepository.findAll();
|
||||
|
||||
// then:
|
||||
exactlyTheseRbacRolesAreReturned(
|
||||
allTheseRbacRolesAreReturned(
|
||||
result,
|
||||
// @formatter:off
|
||||
"customer#aaa.admin", "customer#aaa.tenant",
|
||||
"package#aaa00.admin", "package#aaa00.owner", "package#aaa00.tenant",
|
||||
"package#aaa01.admin", "package#aaa01.owner", "package#aaa01.tenant",
|
||||
"package#aaa02.admin", "package#aaa02.owner", "package#aaa02.tenant"
|
||||
"customer#aaa.admin",
|
||||
"customer#aaa.tenant",
|
||||
"package#aaa00.admin",
|
||||
"package#aaa00.owner",
|
||||
"package#aaa00.tenant",
|
||||
"package#aaa01.admin",
|
||||
"package#aaa01.owner",
|
||||
"package#aaa01.tenant",
|
||||
// ...
|
||||
"unixuser#aaa00-aaaa.admin",
|
||||
"unixuser#aaa00-aaaa.owner",
|
||||
// ..
|
||||
"unixuser#aaa01-aaaa.admin",
|
||||
"unixuser#aaa01-aaaa.owner"
|
||||
// @formatter:on
|
||||
);
|
||||
noneOfTheseRbacRolesIsReturned(
|
||||
result,
|
||||
// @formatter:off
|
||||
"global#hostsharing.admin",
|
||||
"customer#aaa.owner",
|
||||
"package#aab00.admin",
|
||||
"package#aab00.owner",
|
||||
"package#aab00.tenant"
|
||||
// @formatter:on
|
||||
);
|
||||
}
|
||||
@ -102,7 +122,15 @@ class RbacRoleRepositoryIntegrationTest {
|
||||
|
||||
final var result = rbacRoleRepository.findAll();
|
||||
|
||||
exactlyTheseRbacRolesAreReturned(result, "customer#aaa.tenant", "package#aaa00.tenant", "package#aaa00.admin");
|
||||
exactlyTheseRbacRolesAreReturned(
|
||||
result,
|
||||
"customer#aaa.tenant",
|
||||
"package#aaa00.admin",
|
||||
"package#aaa00.tenant",
|
||||
"unixuser#aaa00-aaaa.admin",
|
||||
"unixuser#aaa00-aaaa.owner",
|
||||
"unixuser#aaa00-aaab.admin",
|
||||
"unixuser#aaa00-aaab.owner");
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -191,4 +219,16 @@ class RbacRoleRepositoryIntegrationTest {
|
||||
.containsExactlyInAnyOrder(expectedRoleNames);
|
||||
}
|
||||
|
||||
void allTheseRbacRolesAreReturned(final List<RbacRoleEntity> actualResult, final String... expectedRoleNames) {
|
||||
assertThat(actualResult)
|
||||
.extracting(RbacRoleEntity::getRoleName)
|
||||
.contains(expectedRoleNames);
|
||||
}
|
||||
|
||||
void noneOfTheseRbacRolesIsReturned(final List<RbacRoleEntity> actualResult, final String... unexpectedRoleNames) {
|
||||
assertThat(actualResult)
|
||||
.extracting(RbacRoleEntity::getRoleName)
|
||||
.doesNotContain(unexpectedRoleNames);
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -237,7 +237,7 @@ class RbacUserRepositoryIntegrationTest {
|
||||
final var result = rbacUserRepository.findPermissionsOfUser("mike@hostsharing.net");
|
||||
|
||||
// then
|
||||
exactlyTheseRbacPermissionsAreReturned(result, ALL_USER_PERMISSIONS);
|
||||
allTheseRbacPermissionsAreReturned(result, ALL_USER_PERMISSIONS);
|
||||
}
|
||||
|
||||
@Test
|
||||
@ -266,7 +266,7 @@ class RbacUserRepositoryIntegrationTest {
|
||||
final var result = rbacUserRepository.findPermissionsOfUser("admin@aaa.example.com");
|
||||
|
||||
// then
|
||||
exactlyTheseRbacPermissionsAreReturned(
|
||||
allTheseRbacPermissionsAreReturned(
|
||||
result,
|
||||
// @formatter:off
|
||||
"customer#aaa.admin -> customer#aaa: add-package",
|
||||
@ -276,14 +276,25 @@ class RbacUserRepositoryIntegrationTest {
|
||||
"package#aaa00.admin -> package#aaa00: add-domain",
|
||||
"package#aaa00.admin -> package#aaa00: add-unixuser",
|
||||
"package#aaa00.tenant -> package#aaa00: view",
|
||||
"unixuser#aaa00-aaaa.owner -> unixuser#aaa00-aaaa: *",
|
||||
|
||||
"package#aaa01.admin -> package#aaa01: add-domain",
|
||||
"package#aaa01.admin -> package#aaa01: add-unixuser",
|
||||
"package#aaa01.tenant -> package#aaa01: view",
|
||||
"unixuser#aaa01-aaaa.owner -> unixuser#aaa01-aaaa: *",
|
||||
|
||||
"package#aaa02.admin -> package#aaa02: add-domain",
|
||||
"package#aaa02.admin -> package#aaa02: add-unixuser",
|
||||
"package#aaa02.tenant -> package#aaa02: view"
|
||||
"package#aaa02.tenant -> package#aaa02: view",
|
||||
"unixuser#aaa02-aaaa.owner -> unixuser#aaa02-aaaa: *"
|
||||
// @formatter:on
|
||||
);
|
||||
noneOfTheseRbacPermissionsAreReturned(
|
||||
result,
|
||||
// @formatter:off
|
||||
"customer#aab.admin -> customer#aab: add-package",
|
||||
"customer#aab.admin -> customer#aab: view",
|
||||
"customer#aab.tenant -> customer#aab: view"
|
||||
// @formatter:on
|
||||
);
|
||||
}
|
||||
@ -313,14 +324,29 @@ class RbacUserRepositoryIntegrationTest {
|
||||
final var result = rbacUserRepository.findPermissionsOfUser("aaa00@aaa.example.com");
|
||||
|
||||
// then
|
||||
exactlyTheseRbacPermissionsAreReturned(
|
||||
allTheseRbacPermissionsAreReturned(
|
||||
result,
|
||||
// @formatter:off
|
||||
"customer#aaa.tenant -> customer#aaa: view",
|
||||
// "customer#aaa.admin -> customer#aaa: view" - Not permissions through the customer admin!
|
||||
"package#aaa00.admin -> package#aaa00: add-unixuser",
|
||||
"package#aaa00.admin -> package#aaa00: add-domain",
|
||||
"package#aaa00.tenant -> package#aaa00: view"
|
||||
"package#aaa00.tenant -> package#aaa00: view",
|
||||
"unixuser#aaa00-aaaa.owner -> unixuser#aaa00-aaaa: *",
|
||||
"unixuser#aaa00-aaab.owner -> unixuser#aaa00-aaab: *"
|
||||
// @formatter:on
|
||||
);
|
||||
noneOfTheseRbacPermissionsAreReturned(
|
||||
result,
|
||||
// @formatter:off
|
||||
"customer#aab.admin -> customer#aab: add-package",
|
||||
"customer#aab.admin -> customer#aab: view",
|
||||
"customer#aab.tenant -> customer#aab: view",
|
||||
"package#aab00.admin -> package#aab00: add-unixuser",
|
||||
"package#aab00.admin -> package#aab00: add-domain",
|
||||
"package#aab00.tenant -> package#aab00: view",
|
||||
"unixuser#aab00-aaaa.owner -> unixuser#aab00-aaaa: *",
|
||||
"unixuser#aab00-aaab.owner -> unixuser#aab00-aaab: *"
|
||||
// @formatter:on
|
||||
);
|
||||
}
|
||||
@ -346,7 +372,7 @@ class RbacUserRepositoryIntegrationTest {
|
||||
final var result = rbacUserRepository.findPermissionsOfUser("aaa00@aaa.example.com");
|
||||
|
||||
// then
|
||||
exactlyTheseRbacPermissionsAreReturned(
|
||||
allTheseRbacPermissionsAreReturned(
|
||||
result,
|
||||
// @formatter:off
|
||||
"customer#aaa.tenant -> customer#aaa: view",
|
||||
@ -356,6 +382,22 @@ class RbacUserRepositoryIntegrationTest {
|
||||
"package#aaa00.tenant -> package#aaa00: view"
|
||||
// @formatter:on
|
||||
);
|
||||
noneOfTheseRbacPermissionsAreReturned(
|
||||
result,
|
||||
// @formatter:off
|
||||
// no customer admin permissions
|
||||
"customer#aaa.admin -> customer#aaa: add-package",
|
||||
// no permissions on other customer's objects
|
||||
"customer#aab.admin -> customer#aab: add-package",
|
||||
"customer#aab.admin -> customer#aab: view",
|
||||
"customer#aab.tenant -> customer#aab: view",
|
||||
"package#aab00.admin -> package#aab00: add-unixuser",
|
||||
"package#aab00.admin -> package#aab00: add-domain",
|
||||
"package#aab00.tenant -> package#aab00: view",
|
||||
"unixuser#aab00-aaaa.owner -> unixuser#aab00-aaaa: *",
|
||||
"unixuser#aab00-aaab.owner -> unixuser#aab00-aaab: *"
|
||||
// @formatter:on
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
@ -391,4 +433,20 @@ class RbacUserRepositoryIntegrationTest {
|
||||
.containsExactlyInAnyOrder(expectedRoleNames);
|
||||
}
|
||||
|
||||
void allTheseRbacPermissionsAreReturned(
|
||||
final List<RbacUserPermission> actualResult,
|
||||
final String... expectedRoleNames) {
|
||||
assertThat(actualResult)
|
||||
.extracting(p -> p.getRoleName() + " -> " + p.getObjectTable() + "#" + p.getObjectIdName() + ": " + p.getOp())
|
||||
.contains(expectedRoleNames);
|
||||
}
|
||||
|
||||
void noneOfTheseRbacPermissionsAreReturned(
|
||||
final List<RbacUserPermission> actualResult,
|
||||
final String... unexpectedRoleNames) {
|
||||
assertThat(actualResult)
|
||||
.extracting(p -> p.getRoleName() + " -> " + p.getObjectTable() + "#" + p.getObjectIdName() + ": " + p.getOp())
|
||||
.doesNotContain(unexpectedRoleNames);
|
||||
}
|
||||
|
||||
}
|
||||
|
Reference in New Issue
Block a user