Рейтинг:0

Как изменить условие на И при доступе к контенту по роли в блоке просмотра?

флаг br

У меня есть блок просмотра «Экспо», я хочу отображать этот блок только в том случае, если у текущего пользователя есть две определенные роли пользователя, то есть «Актер» и «Певец».

Когда я проверил «Актер» и «Певец», блок отображается у пользователей, у которых есть роль пользователя «Актер» или «Певец». Когда у пользователя есть две роли пользователя, он отображает два блока.

Насколько я понимаю, между проверенными ролями пользователя используется условное ИЛИ. Как я могу изменить его на условное И?

Рейтинг:2
флаг in

Да, Роль плагин доступа написан таким образом, что его доступ метод работает эффективно как ИЛИ ЖЕ:

доступ к общедоступной функции (AccountInterface $account) {
  return array_intersect(array_filter($this->options['role']), $account->getRoles());
}

Чтобы изменить это поведение, вы можете сделать это двумя способами:

  • Создание нового ПросмотрыДоступ плагин, который в основном работает как Роль но работает с И. Для этого продлите Роль класс, переопределить доступ метод, а затем объявить этот класс как новый @ViewsAccess плагин (не забудьте присвоить ему уникальный идентификатор и новое имя). Этот новый плагин будет отображаться рядом с существующим Роль плагин.

  • Кроме того, вы можете добавить опцию к существующему Роль плагин, чтобы он вел себя как И когда сказали. Для этого вы расширяете существующий Роль класс, переопределить buildOptionsForm способ добавить параметр, переопределить доступ метод работает только как И если он настроен, то изменить существующий Роль класс плагина, чтобы указать на вашу расширенную версию вместо того, что из Views.

    • Если вы знакомы с работой с изменениями формы и изменениями представления для изменения форм и с тем, как вещи отображаются на основе значений формы, этот подход почти аналогичен.
Steve Siddu avatar
флаг br
Как я могу сделать то же самое с обычным блоком, который не является блоком просмотра?
флаг in
@SteveSiddu Помните ту часть макета блока, где вы ограничиваете видимость блока ролью, типом контента и/или путем? Это [плагины @Condition] (https://www.drupal.org/node/1961370). Это плагины другого типа, но они работают аналогично (и так же переопределяемы), как и плагины `@ViewAccess`.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.