@Override public boolean hasRole(RoleModel role) { return this.equals(role) || KeycloakModelUtils.searchFor(role, this, new HashSet<>()); }
@Override public boolean hasRole(RoleModel role) { return this.equals(role) || KeycloakModelUtils.searchFor(role, this, new HashSet<>()); }
@Override public boolean hasRole(RoleModel role) { return this.equals(role) || KeycloakModelUtils.searchFor(role, this, new HashSet<>()); }
@Override public boolean hasRole(RoleModel role) { if (this.equals(role)) return true; if (!isComposite()) return false; Set<RoleModel> visited = new HashSet<RoleModel>(); return KeycloakModelUtils.searchFor(role, this, visited); }
/** * Deep search if given role is descendant of composite role * * @param role role to check * @param composite composite role * @param visited set of already visited roles (used for recursion) * @return true if "role" is descendant of "composite" */ public static boolean searchFor(RoleModel role, RoleModel composite, Set<RoleModel> visited) { if (visited.contains(composite)) return false; visited.add(composite); Set<RoleModel> composites = composite.getComposites(); if (composites.contains(role)) return true; for (RoleModel contained : composites) { if (!contained.isComposite()) continue; if (searchFor(role, contained, visited)) return true; } return false; }