Як перенаправити анонімних користувачів на сторінку входу за допомогою модуля Правил?


12

Я використовую модуль правил з drupal 7 для перенаправлення анонімних користувачів на сторінку входу, тому я створив правило з реагуванням на подію "Drupal ініціалізується", умова "Користувач має роль" з анонімним користувачем та "Не URL-адреса входу на сайт" ", потім додав дію" Перенаправлення сторінки "до URL-адреси входу на сайт. Коли я спробував перевірити правило; drupal продовжував переадресацію на сторінку входу знову і знову, поки сервер apache не перестав працювати. Будь-які рекомендації.


чи може анонімний користувач досліджувати вміст сайту? з якої причини потрібно перенаправляти сторінку входу?
монімірза

анонімним користувачам заборонено досліджувати будь-який вміст сайту та не дозволяється реєструватися, окрім запрошення. Користувачі повинні увійти, щоб користуватися сайтом.
Aboodred1

Я не розумію цю частину: «правило drupal продовжувало перенаправляти на сторінку входу, не показуючи її». Чи можете ви пояснити, що ви маєте на увазі? Інакше я не впевнений, що розумію, яка частина не працює.
Боряна Дітчева

Добре, коли я переходжу на домашню сторінку або будь-яку іншу сторінку, але не на сторінку входу, правило працює нормально; його перенаправлення користувача на сторінку входу, однак браузер продовжує перенаправляти сторінку входу знову і знову, поки апарат не перестане працювати.
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" } } ]
  }
}

@TopTomato це для drupal 7
Aboodred1

я зробив помилку, і вона працює.
TopTomato

@TopTomato Awesome! Радий, що це працювало на вас.
Aboodred1

3

Перейдіть, щоб /admin/people/permissionsзняти прапорці Переглянути опублікований вміст для анонімних користувачів

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

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

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


добре обійшлося, але мені все одно потрібно показати сторінку з забороненим доступом, оскільки не всі користувачі мають однакові дозволи. Я вдячний за твою допомогу.
Aboodred1

потім видаліть "користувача" із (сторінки доступу заборонено) на другому кроці
monymirza

якщо я його видалю; анонімні користувачі можуть бачити лише відмовлений доступ без перенаправлення на сторінку входу. Я впевнений, що в модулі правил
Aboodred1,

так. далі це можна зробити за допомогою модуля правил. Ви також можете зробити це через модуль тригера.
монімірза

1
Якщо комусь доступ заборонено, це не означає, що він не ввійшов. Дивіться цей відповідь
Танвір Ахмад

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 ініціалізується"
Aboodred1

@Chance, мені цікаво. Де він житиме у файлі .theme?
TikaL13

0

Проблема тут - це подія, про яку йдеться. Замість цього Drupal is initializingспробуйте Content is viewed.


Я спробував це до того, як я опублікував це питання, і він справно працював зі мною, за винятком сторінок перегляду, сторінки реєстрації, в основному будь-якої сторінки, яка не є вузлом.
Aboodred1

0

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

  • подія: запис системного журналу створено
  • Умова: Користувач має ролі (а): анонімний
  • дія: значення переспрямування сторінки: користувач

Сподіваюся, що це комусь допоможе.


ви спробували своє рішення, перш ніж розмістити його тут?
Aboodred1
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.