Contenu visible selon utilisateur

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour à tous.

Je cherche à créer une bibliothèque vidéo en ligne, et donc de restreindre l’accès à certains contenus.
J'ai créé un contenu de type "Video" auquel j'affecte 2 tags : Logiciel et Niveau qui permettent de classer une vidéo selon ces termes.

Est-il possible de créer une "view" ou autre chose permettant, selon l'utilisateur, l'accès ou non à certaine Vidéo???

Par exemple :
Utilisateur: Bob

Accès aux vidéos : "Word" de niveau "Facile" et "Moyen" (uniquement)

Utilisateur: Antoine

Accès aux vidéos : "Word" de niveau "Facile"(uniquement)

Utilisateur: Alexandre
Accès aux vidéos : "Excel" de niveau "Facile"(uniquement)

Du coup dans le menu, en cliquant sur l'onglet "vidéo" l'utilisateur verra seulement les vidéos auquel il à le droit de voir.
Peut être qu'il faudra ajouter quelque chose dans la base de donnée pour signifier quel(s) logiciel(s) et niveau(x) sont autorisé en fonction de l'utilisateur.

Merci d'avance pour votre aide.

Version de Drupal : 

Salut

Avec views tu peux affecter la vue que tu mets en place à n'importe quel rôle -> access (par defaut c'est aucun, c'est à dire tout le monde).

Si tu veux aller plus loin, tu as le module "content access" qui est très bien aussi, et qui te permet, en plus de définir quel rôle peut voir le type de contenu, de cocher une case pour affiner encore un peu plus, le noeud en particulier où tu souhaites contrôler l'accès.

Paps

Merci Papoulepaps de ta réponse.

Mais avec les options access de view on peut simplement définir la visibilité pour :
administrator
anonymous user
authenticated user

Donc si (avec mon exemple) bob, antoine et alexandre sont des "authenticated user" comment leur affecter chacun une view différente?

Concernant content access, j'ai installer ce module mais je ne connait pas vraiment son utilisation. Pourrait-il régler mon problème?

Edit: J'espère ne pas devoir créer X rôles afin de leur affecter chacun une view...:s

Justement c'est ma question.
Est-ce que je doit affecter à chacun des groupes un rôle (exemple : word-niveau1, word-niveau2,....Excel-niveau1et2) ou il existe une autre solution.
Celle ci me semble longue et non optimisée.

Je ne crois pas que des rôles "word-niveau1, word-niveau2 ..." soient une bonne idée. Imaginez que vous ajoutiez 5 niveaux pour des vidéos Powerpoint, vous devriez créer 5 nouveaux rôles. A mon avis, chaque utilisateur peut avoir un niveau différent sur chaque logiciel, ils ne peuvent donc pas être regroupés par rôle.

Sur la page d'un profile utilisateur, des champs pourraient être modifiables par l'admin ou l'utilisateur lui même pour refléter son niveau sur chaque logiciel. Cette information (niveau + logiciel), c'est celle que vous avez aussi pour chaque video. Il suffit de les matcher.
Est-ce que ça vous parait cohérent par rapport a la connaissance de votre projet et vos besoins ?

Vous avez accès aux informations sur l'utilisateur a tout moment avec global $user. Donc vous avez aussi l'information sur son niveau pour chaque logiciel, si c'est implémenté comme ci-dessus.
Je creuserai du cote de hook_node_access afin de décider quand un node "video" est accessible ou pas en fonction du niveau l'utilisateur. Les informations sont là, donc vous devriez vous en sortir. Mais je ne dis pas que c'est trivial =)

P-e que qu'un module permet de faire ça plus facilement, mais je ne crois pas vu la spécificité du besoin. Mais sait-on jamais!

En suivant vos conseils j'ai :
-Tagger les contenus vidéos avec "logiciels" et "niveaux"
-Ajouter les champs "Logiciels" et "niveaux" aux utilisateurs
-Créer des views en fonction du logiciel et du niveau

Mais je ne sais pas trop comment donner à un utilisateur par exemple:
Bob (Word-Facile) accès à la view (Word-facile) uniquement
Car dans les views on peut seulement restreindre l’accès avec un rôle. Et comme dit plus haut, il parait fastidieux de créer XXXX rôles différents.

Alors dans les modules j'ai trouvé taxonomy access. Peut-être une solution. Test en cour ... ^^

EDIT: Cela ne semble rien faire de mieux...

J’imagine que vous devez avoir une vue qui affiche vos vidéos en fonction de la taxonomie associée (en utilisant un filtre contextuel). Vous avez donc besoin d'une seule vue.
Cette vue n'affichera probablement que les nodes dont vous avez donné accès dans votre implémentation de hook_node_access, en fonction du niveau de l'utilisateur connecté. Pas besoin donc de spécifier une restriction d’accès dans Views.

Etant donné que le cas d'utilisation n'est pas trivial, je ne peux que vous mettre sur la voie et je ne dis pas que c'est LA solution mais la voie que j'explorerais. Je ferais une vue avec comme argument la taxonomy des nodes videos et j'utiliserais l'API Drupal pour gérer les accès aux nodes listés.

Vous pouvez aussi regarder du coté de hook_node_grants et hook_node_access_records

Vous devez créer votre propre module et implémenter l'un des hooks disponibles. Mais effectivement, si vous êtes débutant, cela risque d’être difficile et de prendre du temps. Peut-être quelqu'un a t'il réussi à résoudre ce problème avec des modules existants, auquel cas vous pouvez attendre une éventuelle réponse!