diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/AssignmentPathSegmentImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/AssignmentPathSegmentImpl.java index a3c462005f9..ace129e2023 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/AssignmentPathSegmentImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/AssignmentPathSegmentImpl.java @@ -451,6 +451,7 @@ static boolean computeMatchingOrder(EvaluationOrder evaluationOrder, Integer ass extraRelations.removeIf(r -> QNameUtil.match(r, orderConstraint.getRelation())); } } + // TODO this is to be reconsidered -- why do we consider assignment of relation e.g. approver non-matching? if (!extraRelations.isEmpty()) { rv = false; } diff --git a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedAssignmentTargetImpl.java b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedAssignmentTargetImpl.java index ecdfad150be..d57dd9f143a 100644 --- a/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedAssignmentTargetImpl.java +++ b/model/model-impl/src/main/java/com/evolveum/midpoint/model/impl/lens/EvaluatedAssignmentTargetImpl.java @@ -67,8 +67,16 @@ public boolean appliesToFocus() { @Override public boolean appliesToFocusWithAnyRelation() { + // TODO clean up this method + if (appliesToFocus()) { + // This covers any indirectly assigned targets, like user -> org -> parent-org -> root-org -(I)-> role + // And directly assigned membership relations as well. + return true; + } + // And this covers any directly assigned non-membership relations (like approver or owner). + // Actually I think these should be also covered by appliesToFocus() i.e. their isMatchingOrder should be true. + // But for some reason it is currently not so. EvaluationOrder order = assignmentPath.last().getEvaluationOrder(); - // TODO check if transitive evaluations are taken into account (they are probably accounted for during assignment evaluation) return order.getSummaryOrder() == 1 || order.getSummaryOrder() == 0 && order.getMatchingRelationOrder(SchemaConstants.ORG_DEPUTY) > 0; }