Как использовать правила Drupal для адаптации прав доступа к контенту для узлов старше 1 недели?

У меня есть специальный тип контента с именем «пример». Я хочу показать новые узлы этого типа анонимным пользователям моего сайта.

Что мне нужно: через 1 неделю узел был создан, права доступа к контенту (модуль Content Access установлен) изменены так, что только пользователи с определенной ролью могут видеть этот узел.

Это должно запускаться в cron или как? Или просто как что-то сделать с узлами старше 1 недели?

Не могли бы вы дать несколько инструкций о том, как это сделать? Потому что я новичок в модуле Правила и не имею никаких идей.


person Somerussian    schedule 26.06.2015    source источник


Ответы (2)


Вы должны иметь возможность сделать это с помощью правил (см. set-field-status-to">этот вопрос, не совсем то, что вы хотите, но близко), но я бы выбрал крошечный пользовательский модуль, реализующий hook_cron, где вы выбираете все узлы с датой создания ‹ (сейчас - 1 неделя), и изменить разрешения для каждого из них.

Это должно быть более эффективно, чем подход Rule, описанный в моей первой ссылке, где вам нужно перебирать все узлы при каждом выполнении cron. И Правила могут быть более раздражающими, чем написание простого PHP. Я предпочитаю изучать Drupal API, чем часами щелкать в интерфейсе Rules (Rules — это здорово, но сложно).

Удачи

person Florian Motteau    schedule 27.06.2015

Да, вы должны иметь возможность заставить это работать, используя модуль Rules для реализации того, что вы ищете, но я рекомендую вам также сочетать это с Правилами один раз в день и < модули href="https://www.drupal.org/project/views_rules" rel="nofollow noreferrer">Views Rules, как более подробно описано ниже.

Шаг 1. Событие правил

В вашем вопросе на самом деле не указано ничего, что может/должно использоваться в качестве события правил (для срабатывания правила. И хотя это похоже на «зависит от вашего собственного воображения» (подойдет любое событие правил), что-то, что будет работать обязательно использовать модуль Правила один раз в день. Вот как это работает (согласно комментарий к проблеме 2495775 от владельца модуля):

  • Вы указываете час срабатывания на странице настроек администратора для этого модуля.
  • Затем триггер правила будет запускаться при первом запуске задач cron после начала этого часа. Фактическое время выполнения будет зависеть от времени выполнения вашей задачи cron.

Итак, это еще один способ понять/прочитать это:

  • «Событие» будет запущено только при запуске задания cron.
  • И это событие будет запускаться только 1 раз/день, то есть «в следующий раз cron запустится после того, как пройдет час триггера».

Шаг 2. Действия правил (и необязательные события)

Некоторые подробности о модуле Views Rules (со страницы проекта):

Предоставляет представления непосредственно в виде действий правил и циклов для беспрепятственного использования данных результатов просмотра.

Предыдущая цитата может показаться немного загадочной (она может заставить вас задуматься: «Ну и что, чем это может мне помочь?»). Поэтому некоторые подробности о том, как двигаться вперед, используя эти модули:

  1. Создайте представление (используя Представления), чтобы у вас был 1 результат Views (строка) со всеми узлы (возрастом не менее 1 недели), которые вы хотите обработать, тогда как в этом представлении есть поля (столбцы) для всего, что необходимо на последующих шагах, например, идентификатор узла, но, возможно, и другие поля. Эти поля просмотра понадобятся вам позже в качестве значений, которые будут обрабатываться вашим правилом «для изменения разрешений на доступ к содержимому (используя content_access), чтобы только пользователи с определенной ролью могли видеть такие узлы" (аналогично тому, что вы упомянули в своем вопросе). Важно: используйте тип отображения представлений «Правила».
  2. Создайте пользовательское правило, в котором вы используете модуль Правила просмотра для повторения каждого из этих результатов просмотра. в действии правил с использованием техники правил, известной как «цикл правил».
  3. Для каждого шага итерации в цикле правил выполняйте действие правил, чтобы «сделать свое дело» (= изменить разрешения на доступ к содержимому). В этот момент у вас будут все данные из каждого столбца результатов ваших представлений, доступных как так называемые параметры правил. Так что в этот момент легко адаптировать права доступа к содержимому для узла, который вы обрабатываете в этом цикле.
  4. При желании вы также можете добавить любые дополнительные условия правил, также на ваше усмотрение.

Легко, не так ли?

person Pierre.Vriens    schedule 10.04.2017