private boolean isRolePage(PageDef pageDef, HttpServletRequest request) {
    //
    // Return true if pageDef has a network role or a vdc role

    //
    boolean rolePage = false;

    if (pageDef != null && (pageDef.getNetworkRole() != null || pageDef.getRole() != null)) {
      rolePage = true;
    }
    return rolePage;
  }
  private boolean isUserAuthorizedForRolePage(
      PageDef pageDef, HttpServletRequest request, LoginBean loginBean) {
    if (loginBean == null) {
      return false;
    }
    VDC currentVDC = vdcService.getVDCFromRequest(request);
    VDCUser user = loginBean.getUser();

    VDCRole userRole = null;
    String userVDCRoleName = null;
    if (currentVDC != null) {
      userRole = loginBean.getVDCRole(currentVDC);
    }
    if (userRole != null) {
      userVDCRoleName = userRole.getRole().getName();
    }

    if (user.getNetworkRole() != null
        && user.getNetworkRole().getName().equals(NetworkRoleServiceLocal.ADMIN)) {
      // If you are network admin, you can do anything!
      return true;
    }
    // Do special authorization for EditStudyPages
    if (isEditStudyPage(pageDef)) {
      return isAuthorizedToEditStudy(pageDef, user, request, currentVDC);
    }

    // If this page has only has a network role, or if it has both network and vdc roles, but no
    // current vdc,
    // do authorization based on network role.
    if (pageDef != null && (pageDef.getNetworkRole() != null && pageDef.getRole() == null)
        || (pageDef.getNetworkRole() != null && pageDef.getRole() != null && currentVDC == null)) {
      if (user.getNetworkRole() != null) {
        if (user.getNetworkRole().getId().equals(pageDef.getNetworkRole().getId())) {
          return true;
        } else {
          return false;
        }
      } else return false;
    }
    // If this page only has a VDC Role,  or if it has both roles and  currentVDC exists,
    // do authorization based on VDC role.
    if (pageDef != null && (pageDef.getRole() != null && pageDef.getNetworkRole() == null)
        || (pageDef.getNetworkRole() != null && pageDef.getRole() != null && currentVDC != null)) {
      if (currentVDC == null) {
        return false;
      }
      String pageRoleName = pageDef.getRole().getName();
      if (userVDCRoleName == null && !isUserStudyCreator(user, request)) {
        return false;
      }

      if (pageRoleName.equals(RoleServiceLocal.ADMIN)) {
        if (userVDCRoleName.equals(RoleServiceLocal.ADMIN)) {
          return true;
        } else {
          return false;
        }
      }
      if (pageRoleName.equals(RoleServiceLocal.CURATOR)) {
        if (userVDCRoleName.equals(RoleServiceLocal.CURATOR)
            || userVDCRoleName.equals(RoleServiceLocal.ADMIN)
            || isUserStudyCreator(user, request)) {
          return true;
        } else {
          return false;
        }
      }
      if (pageRoleName.equals(RoleServiceLocal.CONTRIBUTOR)) {
        if (userVDCRoleName.equals(RoleServiceLocal.CONTRIBUTOR)
            || userVDCRoleName.equals(RoleServiceLocal.CURATOR)
            || userVDCRoleName.equals(RoleServiceLocal.ADMIN)) {
          return true;
        } else {
          return false;
        }
      }
    }

    return false;
  }