Jak przekierować anonimowych użytkowników na stronę logowania przy użyciu modułu Reguły?

12

Korzystam z modułu reguł z drupal 7, aby przekierowywać anonimowych użytkowników na stronę logowania, więc utworzyłem regułę reagując na zdarzenie „Inicjowanie Drupala”, warunek „Użytkownik ma rolę” z anonimowym użytkownikiem i „URL logowania poza witrynę ”, a następnie dodano akcję„ Przekierowanie strony ”do adresu URL logowania do witryny. Kiedy próbowałem przetestować regułę; Drupal ciągle przekierowywał na stronę logowania, aż serwer Apache przestał działać. Wszelkie rekomendacje.

Aboodred1
źródło
czy anonimowy użytkownik może przeglądać zawartość witryny? z jakiego powodu trzeba przekierować stronę logowania?
monymirza
anonimowi użytkownicy nie mogą przeglądać treści witryny i nie mogą się rejestrować z wyjątkiem zaproszenia. Użytkownicy muszą się zalogować, aby korzystać ze strony.
Aboodred1,
Nie rozumiem tej części „zasada drupal ciągle przekierowuje na stronę logowania, nie pokazując jej”. Czy możesz wyjaśnić, co masz na myśli? W przeciwnym razie nie jestem pewien, czy rozumiem, która część nie działa.
Boriana Ditcheva
Kiedy przechodzę do strony głównej lub innej strony, ale nie loguję się, reguła działa poprawnie; przekierowuje użytkownika na stronę logowania, jednak przeglądarka ciągle przekierowuje na stronę logowania, aż apache przestanie działać.
Aboodred1,
jeśli anonimowi użytkownicy nie mogą przeglądać treści witryny, usuń uprawnienia do przeglądania treści
monymirza

Odpowiedzi:

12

Sposób, w jaki to rozwiązałem, jest następujący:

  • Wydarzenia: Drupal inicjuje się
  • Warunki:

    1. Użytkownik ma role (role) -Parameter: User: [site:current-user], Roles: anonymous user
    2. NIE Porównanie tekstu -Parameter: Text: [site:current-page:url], Matching text: user/login
  • Działania: Przekierowanie strony -Parameter: URL: user/login


Eksportuj regułę w następujący sposób:

{ "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
źródło
@TopTomato to jest dla drupal 7
Aboodred1
popełniłem błąd i działa.
TopTomato
@TopTomato Awesome! Cieszę się, że to zadziałało.
Aboodred1,
3

Idź, aby /admin/people/permissionsodznaczyć Wyświetl opublikowane treści dla anonimowych użytkowników

wprowadź opis zdjęcia tutaj

teraz przejdź do /admin/config/system/site-informationpola „użytkownik” w polu (odmowa dostępu)

wprowadź opis zdjęcia tutaj

monymirza
źródło
dobrze się obejść, ale nadal muszę wyświetlać stronę, do której odmówiono dostępu, ponieważ nie wszyscy użytkownicy mają takie same uprawnienia. Doceniam twoją pomoc.
Aboodred1,
następnie usuń „użytkownik” z pola strony (odmowa dostępu) w 2 kroku
monymirza
jeśli go usunę; anonimowi użytkownicy widzą tylko odmowę dostępu bez przekierowywania na stronę logowania. Jestem pewien, że mogę to zrobić w module reguł
Aboodred1,
tak. dalej można to zrobić za pomocą modułu reguł. możesz to również zrobić za pomocą modułu rdzenia wyzwalacza.
monymirza
1
Jeśli ktoś ma odmowę dostępu, nie oznacza to, że nie jest zalogowany. Zobacz tę odpowiedź
Tanvir Ahmad
1

Jestem pewien, że możesz to zrobić za pomocą reguł, ale łatwo byłoby to zrobić również w pliku template.php kompozycji.

Coś takiego powinno działać:

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

Lub, jeśli nadal potrzebny jest dostęp do stron użytkownik / rejestracja i użytkownik / hasło:

global $user;
if ($user->uid == 0 && arg(0) != 'user'){
  drupal_goto('user/login');
}
Szansa G.
źródło
Dzięki @Chance Znalazłem już to rozwiązanie, zanim opublikowałem swoje pytanie. Chcę użyć modułu reguł lub przynajmniej zrozumieć, dlaczego nie działa z „Inicjowaniem Drupala”
Aboodred1,
@Chance, jestem ciekawa. Gdzie by to było w pliku .theme?
TikaL13,
0

Problemem jest dane wydarzenie. Zamiast tego Drupal is initializingspróbuj Content is viewed.

joedougherty
źródło
Próbowałem, zanim opublikowałem to pytanie i działało dobrze ze mną, z wyjątkiem stron przeglądania, strony rejestracji, w zasadzie każdej strony, która nie jest węzłem.
Aboodred1,
0

Wiem, że to post sprzed dwóch lat. Jednak rozwiązanie przekierowujące anonimowego użytkownika na stronę logowania użytkownika z regułami jest następujące:

  • zdarzenie: wpis dziennika systemu jest tworzony
  • warunek: Użytkownik ma role: anonimowy
  • akcja: wartość przekierowania strony: użytkownik

Mam nadzieję, że to komuś pomoże.

Gabke
źródło
wypróbowałeś swoje rozwiązanie przed opublikowaniem go tutaj?
Aboodred1