web-dev-qa-db-fra.com

Module Vues: comment limiter l'accès par utilisateur

J'utilise le module Vues pour créer une vue à laquelle seuls des utilisateurs spécifiques devraient pouvoir accéder. Je sais que Views inclut le contrôle d'accès par rôle ou autorisations, mais j'ai besoin de quelque chose de plus précis: en gros, je veux pouvoir dire que seul l'utilisateur "x" et l'utilisateur "y" peuvent accéder à une vue particulière (ou bien quelqu'un avec un rôle d'administrateur de site). Donc, cela fonctionnerait de manière très similaire à la façon dont le module ACL agit pour les nœuds individuels.

Est la meilleure approche pour créer un plugin d'accès aux vues personnalisées? Je n'ai pas beaucoup d'expérience avec ça.

De plus, je me demande d'utiliser un argument avec une certaine validation pour accomplir cela (de sorte que je n'ai pas à créer des dizaines de vues distinctes). Par exemple, puisque cette vue sera un onglet sur un chemin de nœud spécifique, je me demande de configurer un champ de référence utilisateur sur ce nœud qui spécifie qui pourrait voir la vue. J'aurais juste besoin d'un moyen pour que la vue ne soit validée que si l'utilisateur actuel est égal à un utilisateur spécifié dans le champ de référence utilisateur.

Des idées? Ou suis-je en train de rendre cela plus compliqué que nécessaire?

Merci, Ben

8
BenK

Au lieu de limiter les autorisations sur la vue, vous pouvez limiter les autorisations sur l'élément de menu qui mène à cette vue (que ce soit un onglet sur un nœud ou un rappel de menu). Vous pouvez créer votre vue avec juste un affichage "par défaut" et aucun affichage de page (afin que les utilisateurs ne puissent pas simplement trouver le chemin d'accès). Ensuite, dans votre page callback pour l'élément de menu, appelez simplement views_embed_view pour afficher la vue. Il semble que la gestion des autorisations sur un élément de menu soit plus facile que l'écriture d'un nouveau plug-in pour les vues (bien qu'un plug-in puisse être utile pour d'autres).

5
Chaulky

Essayez le module Views Access Callback .

Fournit un contrôle d'accès basé sur le rappel pour les vues.

Les fonctions de rappel disponibles sont définies par des modules utilisant la fonction hook_views_access_callbacks() (de la même manière que dans hook_perm()), puis peuvent être définies dans la configuration "Restrictions d'accès" de la vue.

6
user5318

Je dois manquer quelque chose, mais il semble que vous créeriez un nouveau rôle et ajouteriez ces utilisateurs. Utilisez ensuite la fonction Accès aux vues: rôle.

Si vous avez besoin de lier les droits d'accès à quelque chose dans le contenu, j'utiliserais un accès Vues personnalisé, que j'ai trouvé difficile à configurer la première fois, mais j'apprécie la flexibilité une fois que vous avez travaillé. Si la vue génère l'élément de menu, il n'apparaîtra pas si la vue ne passe pas la fonction d'accès.

Si vous ne cachez qu'un élément de menu, il me semble que la vue fonctionnerait toujours et qu'un utilisateur pourrait modifier un URI pour afficher les données.

Jerry

2
Jerry

Que diriez-vous d'utiliser le module Autorisations personnalisées pour créer de nouvelles autorisations spécifiquement pour votre objectif, puis d'utiliser le module Autorisations utilisateur pour attribuer ces nouvelles autorisations à des utilisateurs individuels?

Le module d'autorisations personnalisées est très léger. Cependant, je ne suis pas sûr du module des autorisations utilisateur, car il crée essentiellement un nouveau rôle pour chaque utilisateur dans les coulisses (ces rôles ne sont pas visibles sur la page principale des autorisations). Si vous avez beaucoup d'utilisateurs, cela peut augmenter légèrement la taille de vos rôles et des tables user_roles.

1
Tom Kirkpatrick

Si vous souhaitez combiner différents plugins d'accès dans Views, vous voudrez peut-être jeter un œil au module Views access many .

0
Steven Jones

C'est plus logique. Je pense que vous pourriez (peut-être pas sûr à 100%) utiliser une vue et un argument. Définissez l'argument comme un ID utilisateur provenant de l'utilisateur actuellement connecté et faites en sorte que l'argument par défaut n'affiche rien. Cela devrait pouvoir le faire, même si je ne sais pas dans quelle mesure ce serait sûr d'être juste. Si vous l'essayez, postez-le et informez-moi de vos progrès.

0
Jamie Hollern