Comment rediriger des utilisateurs anonymes vers la page de connexion en utilisant le module Rules?

12

J'utilise le module de règles avec drupal 7 afin de rediriger les utilisateurs anonymes vers la page de connexion, j'ai donc créé une règle avec réagir à l'événement "Drupal est en cours d'initialisation", condition "L'utilisateur a un rôle" avec l'utilisateur anonyme et "Pas d'URL de connexion au site ", puis a ajouté une action" Redirection de page "à l'URL de connexion au site. Quand j'ai essayé de tester la règle; drupal a continué à rediriger vers la page de connexion encore et encore jusqu'à ce que le serveur apache cesse de fonctionner. Toutes recommandations.

Aboodred1
la source
un utilisateur anonyme peut-il explorer le contenu du site? pour quelle raison devez-vous rediriger la page de connexion?
monymirza
les utilisateurs anonymes ne sont pas autorisés à explorer le contenu d'un site et ne sont pas autorisés à s'enregistrer, sauf avec une invitation. Les utilisateurs doivent se connecter pour utiliser le site.
Aboodred1
Je ne comprends pas cette partie "la règle drupal continuait de rediriger vers la page de connexion sans l'afficher." Pourriez-vous expliquer ce que vous voulez dire? Sinon, je ne suis pas sûr de comprendre quelle partie ne fonctionne pas.
Boriana Ditcheva
Eh bien, quand je vais à la page d'accueil ou à toute autre page mais pas à la page de connexion, la règle fonctionne bien; il redirige l'utilisateur vers la page de connexion, mais le navigateur continue de rediriger vers la page de connexion encore et encore jusqu'à ce qu'apache cesse de fonctionner.
Aboodred1
si les utilisateurs anonymes ne sont pas autorisés à explorer le contenu d'un site, alors supprimez l'autorisation de visualiser le contenu
monymirza

Réponses:

12

La façon dont je l'ai résolu comme suit:

  • Evènements: Drupal s'initialise
  • Conditions:

    1. L'utilisateur a un ou plusieurs rôles -Parameter: User: [site:current-user], Roles: anonymous user
    2. PAS de comparaison de texte -Parameter: Text: [site:current-page:url], Matching text: user/login
  • Actions: Redirection de page -Parameter: URL: user/login


Exporter la règle comme suit:

{ "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
la source
@TopTomato c'est pour drupal 7
Aboodred1
j'ai fait une erreur et ça marche.
TopTomato
@TopTomato Awesome! Heureux que cela ait fonctionné pour vous.
Aboodred1
3

Aller à /admin/people/permissionsdécocher Afficher le contenu publié pour les utilisateurs anonymes

entrez la description de l'image ici

allez maintenant /admin/config/system/site-informationajouter 'utilisateur' dans le champ de la page (accès refusé)

entrez la description de l'image ici

monymirza
la source
bon travail, mais j'ai toujours besoin d'afficher la page d'accès refusé car tous les utilisateurs n'ont pas les mêmes autorisations. J'apprécie ton aide.
Aboodred1
puis supprimez «utilisateur» du champ de la page (accès refusé) à la 2e étape
monymirza
si je l'enlève; les utilisateurs anonymes peuvent uniquement voir l'accès refusé sans rediriger vers la page de connexion. Je suis sûr qu'il existe un moyen de le faire dans le module de règles
Aboodred1
Oui. davantage peut être fait par le module de règles. vous pouvez également le faire via le module de base de déclenchement.
monymirza
1
Si quelqu'un se voit refuser l'accès, cela ne signifie pas qu'il n'est pas connecté. Voir cette réponse
Tanvir Ahmad
1

Je suis sûr que vous pouvez retirer cela avec des règles, mais ce serait aussi facile à faire dans le fichier template.php de votre thème.

Quelque chose comme ça devrait fonctionner:

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

Ou, si l'accès aux pages utilisateur / inscription & utilisateur / mot de passe est toujours souhaité:

global $user;
if ($user->uid == 0 && arg(0) != 'user'){
  drupal_goto('user/login');
}
Chance G
la source
Merci @Chance J'ai déjà trouvé cette solution avant de poster ma question. Je veux utiliser le module de règles ou au moins comprendre pourquoi cela ne fonctionne pas avec "Drupal est en cours d'initialisation"
Aboodred1
@Chance, je suis curieux. Où cela vivrait-il dans le fichier .theme?
TikaL13
0

Le problème ici est l'événement en question. Au lieu de Drupal is initializing, essayez Content is viewed.

joedougherty
la source
Je l'ai essayé avant de poster cette question et cela a bien fonctionné avec moi, sauf avec les pages d'affichage, la page d'inscription, essentiellement n'importe quelle page qui n'est pas un nœud.
Aboodred1
0

Je sais que c'est un article d'il y a deux ans. Cependant, la solution pour rediriger un utilisateur anonyme vers la page de connexion de l'utilisateur avec des règles est la suivante:

  • événement: l'entrée du journal système est créée
  • condition: l'utilisateur a un ou plusieurs rôles: anonyme
  • action: valeur de redirection de page: utilisateur

J'espère que cela aidera quelqu'un.

Gabke
la source
avez-vous essayé votre solution avant de la poster ici?
Aboodred1