Как перенаправить анонимных пользователей на страницу входа с помощью модуля «Правила»?

12

Я использую модуль правил с drupal 7 для перенаправления анонимных пользователей на страницу входа в систему, поэтому я создал правило с реакцией на событие «Инициализируется Drupal», условие «Пользователь имеет роль» с анонимным пользователем и «URL-адрес входа не на сайт» ", затем добавили действие" Перенаправление страницы "в URL для входа на сайт. Когда я пытался проверить правило; drupal продолжал перенаправлять на страницу входа снова и снова, пока сервер apache не перестал работать. Любые рекомендации.

Aboodred1
источник
может ли анонимный пользователь исследовать контент сайта? по какой причине нужно перенаправить страницу входа?
monymirza
анонимным пользователям не разрешается изучать контент сайта, и им не разрешается регистрироваться, кроме как по приглашению. Пользователи должны войти, чтобы использовать сайт.
Aboodred1
Я не понимаю эту часть «Правило drupal продолжало перенаправлять на страницу входа, не показывая ее». Не могли бы вы объяснить, что вы имеете в виду? В противном случае я не уверен, что понимаю, какая часть не работает.
Борина Дитчева
Хорошо, когда я захожу на домашнюю или любую другую страницу, но не на страницу входа, правило работает нормально; он перенаправляет пользователя на страницу входа, однако браузер продолжает перенаправлять на страницу входа снова и снова, пока apache не перестанет работать.
Aboodred1
если анонимным пользователям не разрешено исследовать контент сайта, удалите разрешение на просмотр контента
monymirza

Ответы:

12

Способ, которым я решил это следующим образом:

  • События: Drupal инициализируется
  • условия:

    1. У пользователя есть роль (и) -Parameter: User: [site:current-user], Roles: anonymous user
    2. НЕ Сравнение текста -Parameter: Text: [site:current-page:url], Matching text: user/login
  • Действия: перенаправление страницы -Parameter: URL: user/login


Правило экспорта следующим образом:

{ "rules_login" : {
    "LABEL" : "login",
    "PLUGIN" : "reaction rule",
    "OWNER" : "rules",
    "TAGS" : [ "login" ],
    "REQUIRES" : [ "rules" ],
    "ON" : { "init" : [] },
    "IF" : [
      { "user_has_role" : {
          "account" : [ "site:current-user" ],
          "roles" : { "value" : { "1" : "1" } }
        }
      },
      { "NOT text_matches" : { "text" : [ "site:current-page:url" ], "match" : "user\/login" } }
    ],
    "DO" : [ { "redirect" : { "url" : "user\/login" } } ]
  }
}
Aboodred1
источник
@TopTomato это для Drupal 7
Aboodred1
Я сделал ошибку, и она работает.
TopTomato
@TopTomato Удивительно! Рад, что это сработало для вас.
Aboodred1
3

Перейти к /admin/people/permissionsснимите флажок Просмотр опубликованного контента для анонимных пользователей

введите описание изображения здесь

Теперь перейдите, чтобы /admin/config/system/site-informationдобавить пользователя в поле доступа (отказано в доступе).

введите описание изображения здесь

monymirza
источник
Хорошая работа, но мне все еще нужно показать страницу с отказом в доступе, потому что не все пользователи имеют одинаковые разрешения. Я ценю вашу помощь.
Aboodred1
затем удалите «пользователя» из поля (доступ запрещен) на 2-м шаге
monymirza
если я уберу это; анонимные пользователи могут видеть только запрещенный доступ без перенаправления на страницу входа. Я уверен, что есть способ, которым я могу сделать это в модуле правил
Aboodred1
да. далее можно сделать с помощью модуля правил. Вы также можете сделать это через модуль ядра триггера.
monymirza
1
Если кому-то запрещен доступ, это не значит, что он не вошел в систему. См. Этот ответ
Tanvir Ahmad
1

Я уверен, что вы можете справиться с правилами, но это будет легко сделать и в файле template.php вашей темы.

Примерно так должно работать:

global $user;
if ($user->uid == 0 && arg(0) != 'user' && arg(1) != 'login'){
  drupal_goto('user/login');
}

Или, если все еще требуется доступ к страницам пользователя / регистрации и пользователя / пароля:

global $user;
if ($user->uid == 0 && arg(0) != 'user'){
  drupal_goto('user/login');
}
Шанс Г
источник
Спасибо @Chance, я уже нашел это решение, прежде чем я разместил свой вопрос. Я хочу использовать модуль правил или хотя бы понять, почему он не работает с "Drupal is initializing"
Aboodred1
@ Шанс, мне любопытно. Где это будет жить в файле .theme?
TikaL13
0

Проблема здесь - рассматриваемое событие. Вместо того Drupal is initializing, чтобы попробовать Content is viewed.

joedougherty
источник
Я попробовал это, прежде чем отправить этот вопрос, и он работал нормально со мной, за исключением просмотра страниц, страницы регистрации, практически любой страницы, которая не является узлом.
Aboodred1
0

Я знаю, что это пост два года назад. Тем не менее, решение для перенаправления анонимного пользователя на страницу входа пользователя с правилами заключается в следующем:

  • событие: запись в системном журнале создана
  • условие: пользователь имеет роль (и): анонимный
  • действие: значение перенаправления страницы: пользователь

Надеюсь, это кому-нибудь поможет.

Gabke
источник
Вы пробовали свое решение, прежде чем опубликовать его здесь?
Aboodred1