--- /dev/null
+<?php
+
+namespace Drupal\d8views\Plugin\views\filter;
+
+use Drupal\views\Plugin\views\display\DisplayPluginBase;
+use Drupal\views\Plugin\views\filter\InOperator;
+use Drupal\views\ViewExecutable;
+
+/**
+ * Filters by given list of node title options.
+ *
+ * @ingroup views_filter_handlers
+ *
+ * @ViewsFilter("d8views_node_titles")
+ */
+class PermissionsByTerm extends InOperator {
+
+ /**
+ * {@inheritdoc}
+ */
+ public function init(ViewExecutable $view, DisplayPluginBase $display, array &$options = NULL) {
+ parent::init($view, $display, $options);
+ $this->valueTitle = t('Allowed node titles');
+ $this->definition['options callback'] = [$this, 'generateOptions'];
+ }
+
+ /**
+ * Override the query.
+ *
+ * So that no filtering takes place if the user doesn't
+ * select any options.
+ */
+ public function query() {
+ if (!empty($this->value)) {
+ parent::query();
+ }
+ }
+
+ /**
+ * Skip validation.
+ *
+ * If no options have been chosen so we can use it as a non-filter.
+ */
+ public function validate() {
+ if (!empty($this->value)) {
+ parent::validate();
+ }
+ }
+
+ /**
+ * Helper function that generates the options.
+ *
+ * @return array
+ * Array keys are used to compare with the table field values.
+ */
+ public function generateOptions() {
+ return [
+ 'my title' => 'my title',
+ 'another title' => 'another title',
+ ];
+ }
+
+}