public static boolean contains(
      PermissionChecker permissionChecker, WikiPage page, String actionId) {

    if (actionId.equals(ActionKeys.VIEW)) {
      WikiPage redirectPage = page.getRedirectPage();

      if (redirectPage != null) {
        page = redirectPage;
      }
    }

    if (page.isPending()) {
      Boolean hasPermission =
          WorkflowPermissionUtil.hasPermission(
              permissionChecker,
              page.getGroupId(),
              WikiPage.class.getName(),
              page.getResourcePrimKey(),
              actionId);

      if (hasPermission != null) {
        return hasPermission.booleanValue();
      }
    }

    if (page.isDraft()
        && actionId.equals(ActionKeys.DELETE)
        && (page.getStatusByUserId() == permissionChecker.getUserId())) {

      return true;
    }

    if (permissionChecker.hasOwnerPermission(
        page.getCompanyId(),
        WikiPage.class.getName(),
        page.getResourcePrimKey(),
        page.getUserId(),
        actionId)) {

      return true;
    }

    if (PropsValues.PERMISSIONS_VIEW_DYNAMIC_INHERITANCE) {
      WikiPage parentPage = page.getParentPage();

      if ((parentPage != null) && !contains(permissionChecker, parentPage, ActionKeys.VIEW)) {

        return false;
      }
    }

    return permissionChecker.hasPermission(
        page.getGroupId(), WikiPage.class.getName(), page.getResourcePrimKey(), actionId);
  }
  public static boolean contains(
      PermissionChecker permissionChecker, WikiPage page, String actionId) {

    Boolean hasPermission =
        StagingPermissionUtil.hasPermission(
            permissionChecker,
            page.getGroupId(),
            WikiPage.class.getName(),
            page.getPageId(),
            PortletKeys.WIKI,
            actionId);

    if (hasPermission != null) {
      return hasPermission.booleanValue();
    }

    if (page.isDraft()) {
      if (actionId.equals(ActionKeys.VIEW)
          && !contains(permissionChecker, page, ActionKeys.UPDATE)) {

        return false;
      }

      if (actionId.equals(ActionKeys.DELETE)
          && (page.getStatusByUserId() == permissionChecker.getUserId())) {

        return true;
      }
    } else if (page.isPending()) {
      hasPermission =
          WorkflowPermissionUtil.hasPermission(
              permissionChecker,
              page.getGroupId(),
              WikiPage.class.getName(),
              page.getResourcePrimKey(),
              actionId);

      if ((hasPermission != null) && hasPermission.booleanValue()) {
        return true;
      }
    } else if (page.isScheduled()) {
      if (actionId.equals(ActionKeys.VIEW)
          && !contains(permissionChecker, page, ActionKeys.UPDATE)) {

        return false;
      }
    }

    if (actionId.equals(ActionKeys.VIEW)) {
      WikiPage redirectPage = page.fetchRedirectPage();

      if (redirectPage != null) {
        page = redirectPage;
      }

      if (PropsValues.PERMISSIONS_VIEW_DYNAMIC_INHERITANCE) {
        WikiNode node = page.getNode();

        if (!WikiNodePermission.contains(permissionChecker, node, actionId)) {

          return false;
        }

        while (page != null) {
          if (!_hasPermission(permissionChecker, page, actionId)) {
            return false;
          }

          page = page.fetchParentPage();
        }

        return true;
      }
    }

    return _hasPermission(permissionChecker, page, actionId);
  }