RBAC generator with conditional grants used for REPRESENTATIVE-Relation #33
@ -659,30 +659,6 @@ begin
|
||||
on conflict do nothing; -- allow granting multiple times
|
||||
end; $$;
|
||||
|
||||
create or replace procedure grantRoleToRoleIfNotNull(subRole RbacRoleDescriptor, superRole RbacRoleDescriptor, doAssume bool = true)
|
||||
language plpgsql as $$
|
||||
declare
|
||||
superRoleId uuid;
|
||||
subRoleId uuid;
|
||||
begin
|
||||
if ( superRoleId is null ) then return; end if;
|
||||
superRoleId := findRoleId(superRole);
|
||||
if ( subRoleId is null ) then return; end if;
|
||||
subRoleId := findRoleId(subRole);
|
||||
|
||||
perform assertReferenceType('superRoleId (ascendant)', superRoleId, 'RbacRole');
|
||||
perform assertReferenceType('subRoleId (descendant)', subRoleId, 'RbacRole');
|
||||
|
||||
if isGranted(subRoleId, superRoleId) then
|
||||
call raiseDuplicateRoleGrantException(subRoleId, superRoleId);
|
||||
end if;
|
||||
|
||||
insert
|
||||
into RbacGrants (grantedByTriggerOf, ascendantuuid, descendantUuid, assumed)
|
||||
values (currentTriggerObjectUuid(), superRoleId, subRoleId, doAssume)
|
||||
on conflict do nothing; -- allow granting multiple times
|
||||
end; $$;
|
||||
|
||||
create or replace procedure revokeRoleFromRole(subRole RbacRoleDescriptor, superRole RbacRoleDescriptor)
|
||||
language plpgsql as $$
|
||||
declare
|
||||
|
@ -421,14 +421,33 @@ public class ImportOfficeData extends ContextBasedTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(2009)
|
||||
@Order(3001)
|
||||
void removeSelfRepresentativeRelations() {
|
||||
assumeThatWeAreImportingControlledTestData();
|
||||
|
||||
// this happens if a natural person is marked as 'contractual' for itself
|
||||
final var idsToRemove = new HashSet<Integer>();
|
||||
relations.forEach( (id, r) -> {
|
||||
if (r.getHolder() == r.getAnchor() ) {
|
||||
idsToRemove.add(id);
|
||||
}
|
||||
});
|
||||
|
||||
// remove self-representatives
|
||||
idsToRemove.forEach(id -> {
|
||||
System.out.println("removing self representative relation: " + relations.get(id).toString());
|
||||
relations.remove(id);
|
||||
});
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(3002)
|
||||
void removeEmptyRelations() {
|
||||
assumeThatWeAreImportingControlledTestData();
|
||||
|
||||
// avoid a error when persisting the deliberately invalid partner entry #99
|
||||
final var idsToRemove = new HashSet<Integer>();
|
||||
relations.forEach( (id, r) -> {
|
||||
// such a record
|
||||
if (r.getContact() == null || r.getContact().getLabel() == null ||
|
||||
r.getHolder() == null || r.getHolder().getPersonType() == null ) {
|
||||
idsToRemove.add(id);
|
||||
@ -443,7 +462,7 @@ public class ImportOfficeData extends ContextBasedTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(2002)
|
||||
@Order(3003)
|
||||
void removeEmptyPartners() {
|
||||
assumeThatWeAreImportingControlledTestData();
|
||||
|
||||
@ -467,7 +486,7 @@ public class ImportOfficeData extends ContextBasedTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(2003)
|
||||
@Order(3004)
|
||||
void removeEmptyDebitors() {
|
||||
assumeThatWeAreImportingControlledTestData();
|
||||
|
||||
@ -486,7 +505,7 @@ public class ImportOfficeData extends ContextBasedTest {
|
||||
}
|
||||
|
||||
@Test
|
||||
@Order(3000)
|
||||
@Order(9000)
|
||||
@Commit
|
||||
void persistEntities() {
|
||||
|
||||
@ -512,6 +531,7 @@ public class ImportOfficeData extends ContextBasedTest {
|
||||
relations.forEach(this::persist);
|
||||
}).assertSuccessful();
|
||||
|
||||
System.out.println("persisting " + partners.size() + " partners");
|
||||
jpaAttempt.transacted(() -> {
|
||||
context(rbacSuperuser);
|
||||
partners.forEach((id, partner) -> {
|
||||
@ -529,7 +549,7 @@ public class ImportOfficeData extends ContextBasedTest {
|
||||
context(rbacSuperuser);
|
||||
debitors.forEach((id, debitor) -> {
|
||||
debitor.setDebitorRel(em.merge(debitor.getDebitorRel()));
|
||||
em.persist(debitor);
|
||||
persist(id, debitor);
|
||||
});
|
||||
}).assertSuccessful();
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user