code: boolean updateNestedRoles(Grantee role) {
  
          boolean hasNested = false;
  
          if (role != this) {
              for (int i = 0; i < roles.size(); i++) {
                  Grantee currentRole = (Grantee) roles.get(i);
  
                  hasNested |= currentRole.updateNestedRoles(role);
              }
          }
  
          if (hasNested) {
              updateAllRights();
          }
  
          return hasNested || role == this;
      }
docs: Recursive method used with ROLE Grantee objects to set the fullRightsMap
  and admin flag for all the roles.
  
  If a new ROLE is granted to a ROLE Grantee object, the ROLE should first
  be added to the Set of ROLE Grantee objects (roles) for the grantee.
  The grantee will be the parameter.
  
  If the direct permissions granted to an existing ROLE Grentee is
  modified no extra initial action is necessary.
  The existing Grantee will be the parameter.
  
  If an existing ROLE is REVOKEed from a ROLE, it should first be removed
  from the set of ROLE Grantee objects in the containing ROLE.
  The containing ROLE will be the parameter.
  
  If an existing ROLE is DROPped, all its privileges should be cleared
  first. The ROLE will be the parameter. After calling this method on
  all other roles, the DROPped role should be removed from all grantees.
  
  After the initial modification, this method should be called iteratively
  on all the ROLE Grantee objects contained in RoleManager.
  
  The updateAllRights() method is then called iteratively on all the
  USER Grantee objects contained in UserManager.
  @param role a modified, revoked or dropped role.
  @return true if this Grantee has possibly changed as a result