public static boolean contains(
      PermissionChecker permissionChecker, ShoppingCategory category, String actionId)
      throws PortalException {

    if (actionId.equals(ActionKeys.ADD_CATEGORY)) {
      actionId = ActionKeys.ADD_SUBCATEGORY;
    }

    if (actionId.equals(ActionKeys.VIEW) && PropsValues.PERMISSIONS_VIEW_DYNAMIC_INHERITANCE) {

      long categoryId = category.getCategoryId();

      while (categoryId != ShoppingCategoryConstants.DEFAULT_PARENT_CATEGORY_ID) {

        category = ShoppingCategoryLocalServiceUtil.getCategory(categoryId);

        if (!_hasPermission(permissionChecker, category, actionId)) {
          return false;
        }

        categoryId = category.getParentCategoryId();
      }

      return ShoppingPermission.contains(permissionChecker, category.getGroupId(), actionId);
    }

    return _hasPermission(permissionChecker, category, actionId);
  }
  public static boolean contains(
      PermissionChecker permissionChecker, long groupId, long categoryId, String actionId)
      throws PortalException {

    if (categoryId == ShoppingCategoryConstants.DEFAULT_PARENT_CATEGORY_ID) {

      return ShoppingPermission.contains(permissionChecker, groupId, actionId);
    } else {
      ShoppingCategory category = ShoppingCategoryLocalServiceUtil.getCategory(categoryId);

      return contains(permissionChecker, category, actionId);
    }
  }