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

8

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

BenK
la source
Vous devrez peut-être écrire un plugin d'accès aux vues, mais si vous pouviez mettre à jour votre question avec un peu plus de détails, vous pourriez peut-être le faire d'une autre manière. Que fait / affiche la vue? Quels utilisateurs sont autorisés à le voir? Les utilisateurs ont-ils des rôles différents? Les utilisateurs ont-ils un champ spécifique ou quelque chose qui leur est associé qui leur permet d'y accéder?
Jamie Hollern
Jamie, merci pour la réponse. En fait, j'utilise également Drupal Commerce pour créer un type unique de boutique en ligne. En tant qu'onglet sur chaque nœud de produit (en plus des onglets Afficher et Modifier), je veux créer un onglet supplémentaire appelé "Commandes" qui serait une vue qui affiche toutes les commandes qui ont inclus ce produit particulier. Le fournisseur du produit particulier est l'utilisateur que je souhaite voir la vue "Commandes" pour ce produit.
BenK
De cette façon, le fournisseur peut surveiller les ventes de son produit sur une base continue. Mais je ne veux pas accorder l'accès à tous ceux qui ont un rôle de «fournisseur», car alors tout fournisseur pourrait voir les ventes des produits des autres fournisseurs. Ça a du sens? ;-) --Ben
BenK

Réponses:

5

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élément de menu, appelez simplement views_embed_viewpour 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).

Chaulky
la source
Merci pour la suggestion! J'ai fini par suivre cette approche générale (qui a également été suggérée par Berdir), mais j'ai créé un champ de référence utilisateur sur chaque nœud appelé field_usercanaccess. J'ai pu utiliser hook_menu () et définir un rappel d'accès qui s'est assuré que l'utilisateur actuel correspondait à un utilisateur référencé dans le champ. Sinon, l'onglet (et la vue) ne seraient pas affichés. Cela fonctionne très bien! :-)
BenK
@BenK génial! Je suis content que tu aies réussi quelque chose. Pour contribuer à faire de Drupal Answers une excellente ressource, vous devez également voter sur les réponses (ou questions) que vous avez trouvées utiles. Donc, vous devriez probablement voter pour la réponse de @ Berdir (et la mienne, mais ce n'est pas moi qui essaie d'obtenir des votes, c'est essayer de faire de Drupal Answers un meilleur site)
Chaulky
Merci. :-) Je suis nouveau sur Stack Exchange et je n'ai que 13 points. Lorsque j'essaie de voter, il est dit que j'ai besoin de 15 points pour voter. Donc, si quelqu'un a deux points à épargner (ou je peux les gagner d'une autre manière), je voterais certainement sur les réponses et les questions. --Ben
BenK
@BenK oh oui, j'ai oublié la limite de 15 points. Vous pouvez toujours essayer de répondre à une question ... un vote positif sur votre réponse obtient 10 répétitions.
Chaulky
6

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 les modules utilisant la hook_views_access_callbacks()fonction (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.

user5318
la source
L'utilisation du rappel d'accès aux vues fonctionne très bien, sauf pour une étrange erreur fatale. Voir ici: drupal.stackexchange.com/questions/3336/… . Cela semble être la voie à suivre - mais comment y remédier?
Druvision
2

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 personnalisé aux vues, 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

Jerry
la source
1

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.

Tom Kirkpatrick
la source
C'est une suggestion intéressante d'utiliser des autorisations personnalisées. Je n'avais pas vu ce module depuis qu'il est devenu plus large que les autorisations de configuration de site. La seule complication ici est que je fais tout cela dans Drupal 7 (et il n'y a pas encore de branche officielle). Mais si je pouvais le faire fonctionner, il serait possible de spécifier directement l'autorisation dans le contrôle d'accès de la vue (sans avoir besoin du module Autorisations utilisateur). Merci pour la suggestion! :-)
BenK
Je vais essayer cela et faire rapport.
BenK
0

D'accord, cela a plus de sens. 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 être en mesure de 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 faites-moi part de vos progrès.

Jamie Hollern
la source
Ouais, je vais essayer et faire un rapport. J'essaie également un plugin d'accès aux vues avec un argument, nous verrons donc comment cela se passe. Merci.
BenK
0

Si vous souhaitez combiner différents plugins d'accès dans Views, vous pouvez consulter le module Views access many .

Steven Jones
la source