2009-11-16 6 views
1

Je dois limiter l'accès du contenu sur le site Drupal en fonction du rôle de l'utilisateur Drupal.Section Drupal accessible par le rôle

http://site.com/managers/intro

http://site.com/managers/reviews

http://site.com/managers/up-for-raises

Le contenu peut être de plusieurs types de contenu et ne se limite pas à un type de contenu spécifique. Ces types de contenu seront utilisés ailleurs sur le site, donc je ne peux pas verrouiller tout le type de contenu. Je peux obtenir tous les nœuds/vues à vivre à ces adresses par les paramètres de menu quand ils sont créés, mais je ne sais pas comment limiter l'accès via un rôle autre qu'un tas de fonctions de prétraitement dans template.php, mais cela semble être la mauvaise façon de le faire.

J'ai cherché un module et j'ai demandé # l'IRC de drupal-support, mais aucun résultat n'a été trouvé qui utilise des rôles drupal comme facteur limitant.

Répondre

1

Si je comprends bien, ce que vous essayez de faire est d'avoir seulement certains rôles pouvant accéder à des pages situées à une URL donnée.

PAR L'AIDE D'UN ACCÈS CONTRIB MODULE

Comme déjà mentionné par mcrittenden, il y a une plethora of modules qui vous permet d'ajuster l'accès au contenu. Parmi eux, content access peut sûrement faire ce que vous voulez, car il vous permet de configurer la permission pour chaque nœud séparément.

EN UTILISANT FLAG + VUES

Une autre façon possible de le faire sans codage, est une combinaison des flag module du views module. Voici un bref aperçu de la façon dont je le ferais:

  1. Créer trois drapeaux, que vous pouvez utiliser pour le contenu marquer (tout type de contenu!) Qui devra être consulté à l'une des adresses que vous avez spécifié dans votre question (par exemple: créez un drapeau "intro" que vous utiliserez pour marquer les nœuds qui doivent être affichés sur la page "/ mangers/intro")
  2. Créez 3 vues (une pour chaque adresse que vous avez indiquée dans votre question) que sortirait de la base de données les nœuds dont vous avez besoin en les filtrant sur la base de votre drapeau.
  3. Définissez l'autorisation de ces vues en fonction du rôle.

PAR UN MODULE ÉCRITURE QUE LES CONTROLES URI ET BLOC NON AUTORISÉ UTILISATEURS

Vous pouvez certainement le faire. Le principal avantage serait que ce serait une solution très légère en termes de CPU et de charge de mémoire, mais il y a quelques pièges auxquels vous devez faire attention. Par exemple le fait que vous pouvez toujours accéder à votre contenu via urls au format http://example.com/node/nodenumber), donc vous devez également vérifier une URL pour ses alias. Mais aussi le fait qu'un utilisateur peut ajouter un faux? Quelque chose à l'URL et vous devez écrire le regex de prendre en compte ce cas ...

(également l'idée de la rules module donnée par mcrittenden est bon, mais je ne l'ai pas mentionné car je n'y ai pensé que lorsque j'ai lu sa réponse).

Espérons que cela aide!

+0

Le module http://drupal.org/project/globalredirect devrait prendre en charge "node/123". Il redirige toutes les URL vers un seul chemin, préférant utiliser l'alias si possible. Vous pouvez également utiliser hook_menu_alter pour refuser l'accès à chaque nœud, puis réactiver l'accès pour les nœuds avec un chemin comme décrit. – Grayside

2

Il me semble que si 'managers' est toujours dans l'URL de cette section, vous pouvez écrire un petit module qui utilise hook_init pour dire essentiellement si le rôle de l'utilisateur actuel n'est pas l'un de ces rôles spécifiés , et l'URL contient "/ managers /", puis drupal_goto() la page de connexion.

Vous pouvez également utiliser le module Règles pour y arriver assez facilement, mais si c'est la seule chose pour laquelle vous utiliseriez Rules, cela n'en vaut pas la peine.

Il existe également de nombreux modules d'accès par nœuds (tels que nodeaccess de toutes les choses), mais il serait probablement plus difficile d'accomplir une tâche aussi simple.

+0

J'ai des règles déjà installées, mais je suis nouveau pour les règles. Comment est-ce que je ferais un combo rule/trigger pour détecter le modèle de rôle et d'URL? – easement

+0

J'ai une règle déclenchée configurée afin que je puisse rediriger pour me connecter quand le contenu est vu. Cependant, je ne sais pas comment affecter la règle à un contenu spécifique. – easement

+0

Vous devriez pouvoir ajouter une condition qui réduit les pages auxquelles la règle s'applique. –

0

Vous pouvez également rechercher Menu Access, ce qui vous permet d'associer l'accès entre un rôle et un menu, ou un rôle et une arborescence de menus. (Gardez à l'esprit que dans Drupal, la table "routeur de menu" est mystérieusement non seulement l'interface utilisateur, mais aussi le routeur de trafic qui relie chaque morceau de contenu à une URL.)

Parce que tous les éléments sont associés à des entrées de menu, vous n'avez pas le problème de l'alias de chemin n'étant pas nécessairement universel. Vous pouvez également utiliser des modules tels que Menu Block pour imiter la navigation dans les livres.

Ce module semble être plus proche d'une version alpha ou bêta malgré son statut & recommandé, alors soyez prudent sur les sites de production.

4

Bien que ce soit une ancienne question, le module Path Access fait exactement cela maintenant. Voici un extrait de sa page de projet:

... donne aux administrateurs de site une couche supplémentaire de contrôle d'accès à toutes les pages d'un site Drupal. Avantages: Bien que de nombreux modules Drupal offrent un certain degré de contrôle d'accès, ils ne couvrent jamais toutes les exigences possibles des utilisateurs. Path_access fournit les moyens de restreindre les pages en fonction de leur alias de chemin, ce qui signifie que vous pouvez verrouiller certains groupes de rôles utilisateur à partir de sections entières d'un site à l'aide de caractères génériques.

+0

Nice. C'est un de ceux que ça aurait été bien de savoir il y a un moment. J'ai fait un module très léger qui fait quelques vérifications simples, mais aurait été bien de sauver le temps de dev. – easement

Questions connexes