You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@isis.apache.org by ah...@apache.org on 2022/01/13 16:18:24 UTC
[isis] branch master updated: ISIS-2703: secman: prevent tenancies from containing themselves
This is an automated email from the ASF dual-hosted git repository.
ahuber pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/isis.git
The following commit(s) were added to refs/heads/master by this push:
new 21d48cb ISIS-2703: secman: prevent tenancies from containing themselves
21d48cb is described below
commit 21d48cb0d2b9b77dfb81c28d5997acb0f16b8eb4
Author: Andi Huber <ah...@apache.org>
AuthorDate: Thu Jan 13 17:18:02 2022 +0100
ISIS-2703: secman: prevent tenancies from containing themselves
---
.../dom/mixins/ApplicationTenancy_addChild.java | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_addChild.java b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_addChild.java
index cbff35c..35a02d3 100644
--- a/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_addChild.java
+++ b/extensions/security/secman/applib/src/main/java/org/apache/isis/extensions/secman/applib/tenancy/dom/mixins/ApplicationTenancy_addChild.java
@@ -19,6 +19,7 @@
package org.apache.isis.extensions.secman.applib.tenancy.dom.mixins;
import java.util.Collection;
+import java.util.Objects;
import javax.inject.Inject;
@@ -61,10 +62,27 @@ public class ApplicationTenancy_addChild {
@MemberSupport public Collection<? extends ApplicationTenancy> choicesChild() {
val choices =_Lists.newArrayList(applicationTenancyRepository.getRootTenancies());
- choices.remove(target);
+ choices.removeIf(this::containsTarget); // ensure tree structure (nodes cannot contain themselves)
return choices; }
@MemberSupport public String disableAct() {
return choicesChild().isEmpty()? "No root (non-paranted) tenancies available": null; }
+
+ // -- HELPER
+
+ /**
+ * For given t traverses up the tree hierarchy in search of a match.
+ */
+ private boolean containsTarget(final ApplicationTenancy t) {
+ var node = t;
+ while(node!=null) {
+ if(Objects.equals(node, target)) {
+ return true;
+ }
+ node = node.getParent();
+ }
+ return false;
+ }
+
}