Example usage for org.springframework.security.access.hierarchicalroles CycleInRoleHierarchyException CycleInRoleHierarchyException

List of usage examples for org.springframework.security.access.hierarchicalroles CycleInRoleHierarchyException CycleInRoleHierarchyException

Introduction

In this page you can find the example usage for org.springframework.security.access.hierarchicalroles CycleInRoleHierarchyException CycleInRoleHierarchyException.

Prototype

public CycleInRoleHierarchyException() 

Source Link

Usage

From source file:org.opendatakit.security.spring.RoleHierarchyImpl.java

/**
 * For every higher role from rolesReachableInOneStepMap store all roles that are reachable from
 * it in the map of roles reachable in one or more steps. (Or throw a
 * CycleInRoleHierarchyException if a cycle in the role hierarchy definition is detected)
 *//*from   w ww .  j a  v  a 2  s . c o  m*/
private Map<GrantedAuthority, Set<GrantedAuthority>> buildRolesReachableInOneOrMoreStepsMap(
        Map<GrantedAuthority, Set<GrantedAuthority>> rolesReachableInOneStepMap) {
    Map<GrantedAuthority, Set<GrantedAuthority>> localCopyRolesReachableInOneOrMoreStepsMap = new HashMap<GrantedAuthority, Set<GrantedAuthority>>();
    // iterate over all higher roles from rolesReachableInOneStepMap

    for (GrantedAuthority role : rolesReachableInOneStepMap.keySet()) {
        Set<GrantedAuthority> rolesToVisitSet = new HashSet<GrantedAuthority>();

        if (rolesReachableInOneStepMap.containsKey(role)) {
            rolesToVisitSet.addAll(rolesReachableInOneStepMap.get(role));
        }

        Set<GrantedAuthority> visitedRolesSet = new HashSet<GrantedAuthority>();

        while (!rolesToVisitSet.isEmpty()) {
            // take a role from the rolesToVisit set
            GrantedAuthority aRole = (GrantedAuthority) rolesToVisitSet.iterator().next();
            rolesToVisitSet.remove(aRole);
            addReachableRoles(visitedRolesSet, aRole);
            if (rolesReachableInOneStepMap.containsKey(aRole)) {
                Set<GrantedAuthority> newReachableRoles = rolesReachableInOneStepMap.get(aRole);

                // definition of a cycle: you can reach the role you are starting from
                if (rolesToVisitSet.contains(role) || visitedRolesSet.contains(role)) {
                    throw new CycleInRoleHierarchyException();
                } else {
                    // no cycle
                    rolesToVisitSet.addAll(newReachableRoles);
                }
            }
        }
        localCopyRolesReachableInOneOrMoreStepsMap.put(role, visitedRolesSet);

        logger.debug("buildRolesReachableInOneOrMoreStepsMap() - From role " + role + " one can reach "
                + visitedRolesSet + " in one or more steps.");
    }

    return localCopyRolesReachableInOneOrMoreStepsMap;
}

From source file:org.springframework.security.access.hierarchicalroles.RoleHierarchyImpl.java

/**
 * For every higher role from rolesReachableInOneStepMap store all roles that are
 * reachable from it in the map of roles reachable in one or more steps. (Or throw a
 * CycleInRoleHierarchyException if a cycle in the role hierarchy definition is
 * detected)/*w  w w.  j  a va 2  s. c  om*/
 */
private void buildRolesReachableInOneOrMoreStepsMap() {
    this.rolesReachableInOneOrMoreStepsMap = new HashMap<>();
    // iterate over all higher roles from rolesReachableInOneStepMap

    for (GrantedAuthority role : this.rolesReachableInOneStepMap.keySet()) {
        Set<GrantedAuthority> rolesToVisitSet = new HashSet<>();

        if (this.rolesReachableInOneStepMap.containsKey(role)) {
            rolesToVisitSet.addAll(this.rolesReachableInOneStepMap.get(role));
        }

        Set<GrantedAuthority> visitedRolesSet = new HashSet<>();

        while (!rolesToVisitSet.isEmpty()) {
            // take a role from the rolesToVisit set
            GrantedAuthority aRole = rolesToVisitSet.iterator().next();
            rolesToVisitSet.remove(aRole);
            addReachableRoles(visitedRolesSet, aRole);
            if (this.rolesReachableInOneStepMap.containsKey(aRole)) {
                Set<GrantedAuthority> newReachableRoles = this.rolesReachableInOneStepMap.get(aRole);

                // definition of a cycle: you can reach the role you are starting from
                if (rolesToVisitSet.contains(role) || visitedRolesSet.contains(role)) {
                    throw new CycleInRoleHierarchyException();
                } else {
                    // no cycle
                    rolesToVisitSet.addAll(newReachableRoles);
                }
            }
        }
        this.rolesReachableInOneOrMoreStepsMap.put(role, visitedRolesSet);

        logger.debug("buildRolesReachableInOneOrMoreStepsMap() - From role " + role + " one can reach "
                + visitedRolesSet + " in one or more steps.");
    }

}