Questions à propos de Drupal en multisites

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,

cela fait plusieurs jours que je me suis mis à Drupal car on m'a demandé de tester ce CMS afin de pouvoir l'utiliser pour créer plusieurs sites.
En fait, le but est d'avoir une installation de base, en gros un site template, et ensuite, de pouvoir à la demande créer le plus rapidement possible de nouveaux sites avec les mêmes caractéristiques que le template, un peu de contenu et un ou des utilisateurs qui seront par la suite administrateur de leur site et qui donc créerons leur propre contenu.
Donc en résumé, il y aura moi, qui serait si on peut dire super admin et qui mettrait en place les nouveaux sites, un ou des administrateurs pour chacun de ces sites, qui auront donc certains droits d'administration mais pas tous, et des utilisateurs lambda sans aucun droit d'admin mais qui pourront créer du contenu et éventuellement des utilisateurs qui pourront juste consulter certaines pages.

J'ai donc plusieurs questions pour savoir si je pourrai réaliser cela avec Drupal 6.14.
Déja, premièrement, dans l'installation multisites, il est possible soit de créer une nouvelle base de données pour chaque site, soit de tous les créer dans la même base en ajoutant un préfixe différent pour les tables de chaque site. Que vaut-il mieux faire ???

Ensuite, dans la gestion des utilisateurs, il est possible de cocher ou non "accéder au contenu", mais est-il possible d'affiner ce réglage, c'est à dire que certains utilisateurs aient accès à un certain type de contenu mais pas à d'autres, etc...
Et toujours dans le même style, est-il possible d'afficher des menus différents pour des utilisateurs différents (en fait n'afficher que les liens auxquels l'utilisateur à droit plutôt que de le diriger vers des pages 'Accès refusé').

De plus, au niveau des mises à jours de Drupal version multisites, est-ce qu'il suffit de mettre à jour un site (thèmes, module, core), pour que tous les sites soient mis à jour étant donné que tous les sites tournent avec le même Drupal ???

Voilà, j'ai pas mal d'autres questions avant de voir si Drupal peut répondre à tous mes besoins (fonctionnement Newsletter, Mise à jour, etc...), mais ça va plutôt aller dans la section support du forum, donc rdv là-bas :)

En tous cas, merci d'avance pour vos réponses.
Tchuss, @+, jinpol...

Version de Drupal : 

Question 1 : tu peux faire les 2 : une bd différente par site ou une seule BD avec les tables préfixée. Informatiquement c'est pareil.
Maintenant, il me semble plus clair d'avoir une BD par site si les sites sont à 100% indépendants, et des tables préfixées si tu partages certaines bases dans tes différents sites.

Question 2 : pour la gestion des utilisateurs en terme de visibilité, tout est possible. Il faudra que tu choisisses entre divers modules.

Question 3 : menus différents selon les rôles : oui, c'est possible. Il suffit que le menu soit un bloc, et tu gère l'affichage des blocs en fonction du rôle des utilisateurs.

Question 4 : si tous tes modules sont partagés dans tous tes sites, oui, il suffit d'upgrader un module pour que tous tes sites s'upgradent.

Questions complémentaires : Newsletter : oui avec SimpleNews (attention c'est un module un peu lourd, il faut prévoir un hébergement décent), Mise à jour : module Upload dans le core de Drupal t'indique les modules qui ont une nouvelle verions. Copier/coller le nouveau module et normalement c'est bon (mais on laisse les anciennes versions si on a pas de pb et que l'on n'a pas besoin des nouvelles fonctionnalités).

Ouf, je suis arrivé au bout! Tu aurais pu appeler ton post QuestionS pour... ;-}

Tu aurais pu attendre que j'ai fini de posté mon message avant d'y répondre :p
Bah, j'exagère à peine dis donc.
En tous cas, merci pour ces réponses ultra-rapides :)

Question 1 : Quand tu dis 'et des tables préfixées si tu partages certaines bases dans tes différents sites.', tu veux dire si par exemple j'héberge 2 sites dans la même base, c'est ça ???
Je pense que soit je ferai une base par site, soit je les mettrai tous dans la même base.

Question 2 : Ok, j'ai plus qu'à me pencher sur les différents modules qui proposent cela. Tu en aurais un à me conseiller ?

Question 3 : Ce sera possible en fait quand j'aurai installé mon module de gestion des utilisateurs, c'est ça ??? Car avec l'installation de base, il me semble que ce n'est pas possible.

Question 4 : Est-ce qu'il y a parfois, dans les mises à jour de modules des nouvelles tables ou des nouveaux champs dans les tables de la base de données ???
Car si oui, au moment ou je fais la mise à jour, seule la BD du site par lequel j'effectue la mise à jour sera impactée non ?

Questions complémentaires : c'est le module Update status et non le module Upload non ??? :)

PS : je vais de ce pas rajouter un S à Question dans mon titre de post :p

Question 1 : non, je dis par ex. que si tu partages CERTAINES tables (par ex. la table des utilisateurs, ou d'autres. En gros, chaque site a ses propres tables, sauf certaines qui sont partagées entre tous les sites (par ex. les utilisateurs sont communs à tous les sites, mais toutes les autres bases sont séparées). Si les sites ont 100% de leurs bases autonomes, il vaut mieux avoir des bases séparée (et question sécurité des utilisateurs séparés ayant accès uniquement à leur base de données).

Question 2 : il y en a des tonnes. Dis-moi juste exactement ce que tu souhaites afficher/masquer (c'est uniquement par type de contenu?)

Question 3 : non, c'est disponible nativement. Chaque menu créé se retrouve dans un bloc automatiquement. Bloc que l'on peut afficher dans la régions où l'on souhaite + uniquement pour certains rôles.

Question 4 : c'est extrêmement rare qu'un module change la structure des tables. Dans ce cas, j'avoue n'avoir jamais testé. En envoyant le script update.php, je pense qu'effectivement il faut le lancer sur chacun des sites.

Questions complémentaire : exact, désolé pour la petite erreur.

Re-re-re merci pour les réponses :)

Question 1 : je vais analyser ça de prêt car j'avoue ne pas tout comprendre sur ce fonctionnement, et je reviendrais quand j'aurai mieux compris tout ça.

Question 2 : je vais demander un peu plus de précision sur les spec afin de pouvoir t'en faire part, voir si tu peux me conseiller.

Question 3 : super, je viens d'aller voir ça et en effet, c'est très simple de créer un menu différent pour chaque rôle créé :)

Question 4 : je crois que cette question n'a plus sa place ici, et qu'il faudra que j'aille la détailler dans la partie support du forum.

Questions complémentaire : no pb ;)

Tchuss, @+, jinpol...

Salut et bien le bonjour :)

Me revoilà pour compléter un peu ma demande afin que tu y vois plus clair dans ce dont j'ai besoin au niveau des droits.

Mais avant tout, tjs au sujet de la question 1. Ce que je ne comprends pas, c'est si jamais je crée une base par site, comment quand je me connecterai sur un de ces sites, si toutes les tables ne sont pas présentent dans cette base, il va savoir où aller chercher les infos par exemple pour les utilisateurs ??? La table des utilisateurs va s'installer dans la base du premier site que je vais installer ???
Là j'avoue que je rame un peu sur ce point là. Je pensai que si on créait une base par site, aucune des tables ne seraient communes.

Bon, maintenant, au sujet des droits, voilà ce qu'il faut que je fasse.
J'ai donc un superadmin qui a donc tous les droits sur tous les sites etc...ça pas de soucis, il existe déjà...et ce sera moi :p
Ensuite, pour chacun des sites que je vais mettre en place, il y aura un ou des administrateurs avec des droits restreins, comme créer des utilisateurs pour le site qu'ils gèrent, attribuer les droits à ces utilisateurs, etc...
Et là où il faut que je puisse affiner comme il faut les droits, c'est au niveau de ces utilisateurs justement.
En fait, il faut en gros que je puisse afficher un menu qui ressemble à l'explorateur de Windows.
Je vais avoir des dossiers (Menu de plus haut niveau), des sous-dossiers, et du contenu (page, article, etc...).
Je peux dans un dossier, avoir du contenu ET des sous-dossiers qui eux-même auront du contenu.
Mais là où ça se complique un peu, c'est que je dois pouvoir affiner les droits sur chacun de mes contenus et pour chaque utilisateur.
Par exemple si j'ai ça :

  • Dossier1 -> Sous-dossier1 -> Contenu1.1.1
    -----------------------------> Contenu1.1.2
    ------------> Contenu1.1
    ------------> Contenu1.2

je dois pouvoir donner le droit d'accès à chacun de ces contenus selon le type d'utilisateur.
Par exemple, si un utilisateur doit pouvoir voir le Contenu1.1 et le Contenu1.2 et doit pouvoir éditer le Contenu1.1.2, il aura dans son menu :

  • Dossier1 -> Sous-dossier1 -> Contenu1.1.2
    ------------> Contenu1.1
    ------------> Contenu1.2

De plus il faudrait par exemple que si pour le Sous-dossier1, je puisse fixer des droits dont hériteront tous les contenus, sauf si je décide d'affiner ces droits au niveau du contenu.

Je pense qu'en jouant sur les rôles, et en attribuant à chaque utilisateur plusieurs rôles, on doit pouvoir arriver à cela.
La par exemple, mon utilisateur appartiendrait aux groupes :
-> editContenu1.1.2
-> HideContenu1.1.1

si tant est que le droit par défaut et View pour tous les dossiers (et donc tous les contenu de ces dossiers, par héritage).
Le problème, c'est qu'on peut afficher des blocs selon le rôle d'un utilisateur, mais moi, ce que je veux, c'est afficher seulement les parties du menu auxquels mon utilisateur doit avoir accès.

J'espère que c'est assez clair et que tu vas pouvoir me guider un peu car si je ne peux pas faire ça, je vais être obligé de laisser tomber l'option Drupal que je commence vraiment à apprécier :)

Merci d'avance.
Tchuss, @+, jinpol...

Oulà, il va falloir que tu optes pour un consultant!!

Bon, allez, je suis dans un bon jour :

Au sujet de la question 1 : oublie ce que j'ai dit, créée une base par site, ce sera plus simple pour toi. Chaque site aura bien sa propre base, indépendante. Je te conseille juste de ne pas avoir une table pour plein de sites sinon tu ne t'y retrouvera pas (il y a facilement 100 tables par site Drupal).

Sinon, je ne comprend pas bien ton histoire de dossiers/sous-dossiers. Un site Internet ne se gère pas comme un explorateur Windows... Sous Drupal, on créé uniquement des noeuds (contenus), donc je présume qu'il va te falloir une taxonomie et un module qui restreint l'accès en fonction de la taxonomie (il s'appelle taxonomy access ou qq chose comme ça). Après je ne suis pas sûr que ce module restreint aussi l'accès à la création d'un certain terme de taxonomie...

Après, quand les champs sont appelés correctement par Views, ne sont montrés que les champs auxquels les utilisateurs ont accès. L'affichage ou non du bloc est indépendant (si l'utilisateur n'a accès à aucun des champs affichés dans la vue, mais a accès au bloc, c'est un bloc vide qui s'affiche). Si ton affichage est plus en dur, à toi de mettre du PHP en faisant un if (if l'utilisateur a le bon rôle, alors j'affiche, sinon, je n'affiche rien). La variable $user contient toutes les informations de l'utilisateur courant, et peut être appelée n'importe où...

De même je ne vois pas bien tes utilisateurs : je pensait que chaque utilisateur avait son site et avait tous les droits dessus...mais si je comprend bien, il y a aussi des sous-utilisateurs ajoutés par l'utilisateur principal...?

Salut,

bon, pour la question 1, je vais faire comme ça, si bien sûr je peux utiliser Drupal pour faire ce que je veux.

Pour mon problème de droit, je sais qu'il n'y a pas de dossiers et sous-dossiers pour un site Internet, mais il faut en fait que je retranscrive cela au travers du menu.
En fait, je pense que Dossier sera un nouveau type de Contenu (nouveau noeud), et idem pour Sous-dossier.
Ensuite, j'aurai donc dans mon menu, les liens de plus haut niveau qui seront Dossier, et puis si je clique sur ce lien, en fait, ça me déroulera mon menu, avec soit des Sous-dossiers, soit des pages, soit etc...et ça m'affichera la liste de mes contenus de ce Dossier. Là, je pourrai soit afficher un Contenu de type page via le lien dans le menu ou celui dans la liste que je viens d'afficher, soit continuer à dérouler un Sous-dossier s'il y en a un.
En fait, la réalisation de cette arborescence est je pense pas bien compliqué, c'est juste un menu avec des sous-menus. Ce qui est délicat dans mon cas, c'est d'adapter le menu à chaque type d'utilisateur selon les droits qu'il aura sur chaque Contenu du site.

En fait, au moment où un noeud est crée, on doit pouvoir dire qui pourra voir/modifier/administrer ce noeud.

Et en ce qui concerne les utilisateurs, en effet, il y a un utilisateur qui peut administrer le site (mais pas ajouter des modules, des types de contenu ou autres trucs de ce genre, ça, c'est moi qui le gère), par contre,il peut créer des utilisateurs et leur donner les droits qu'il veut sur le site.
Ceci a pour but de créer en fait une site de travail collaboratif pour lequel chaque utilisateur ne doit pouvoir accéder qu'à l'information qui l'intéresse.

Bon, je crois que je vois à peu près... Sans trop y avoir réfléchis, je ne vois pas trop d'autre possibilité que d'utiliser les rôles et de faire un menu en PHP en fonction des rôle grâce à cette fameuse variable $user accessible partout. En gros, les rôles seront en fait des groupes (groupe 1, groupe 2...). Les contenus créés par un groupe ne sont accessibles que par les mêmes membres du groupe (par ex. il y aura autant de contenu que de groupe contenu groupe 1, contenu groupe 2... et tu peux utiliser les droits d'accès classiques). Pour avoir des droits d'accès plus compliqués, il existe des modules (par ex. Content Access).

Bien le bonjour,

j'ai un exemple de site qu'on a fait avec Plone, utilisant la même politique de droit, si tu veux voir à peu prêt à quoi ça doit ressembler.

http://www.recwowe.eu/

Dans le menu à gauche, si par exemple tu cliques sur Meetings, tu as le menu qui se déroule, et la liste des meetings dans la page centrale. Et tu as là des sous-menus qui peuvent être soit des pages classiques, soit des Sous-dossiers qui contiennent à leur tour du contenu et/ou des Sous-dossiers.
Et donc, quand je parle de Dossiers et Sous-dossiers, ce sont en fait tout simplement de nouveaux nœuds que je nommerai 'Dossier' et 'Sous-dossier' et qui présenteront soit la liste de ce qu'ils contiennent, soit du contenu HTML comme un page web classique.

Et pour la gestion des droits, il me semble que ce post réponde à ma question et qu'il faille donc que j'utilise le module "menu_per_role" :

http://drupalfr.org/node/1826

Au fait, encore merci et merci pour le temps que tu prends à chaque fois pour répondre à mes questions.

Pour la suite de mon épopée, je pense que je vais poser mes questions dans le forum support car là, on est plus trop avant l'installation il me semble :p

Tchuss, @+, jinpol...

Bonjour Emerya,

Comment faire pour partager uniquement certaines tables ?

En gros, lors de l'install d'un site supplémentaire tu lui indiques la même base, mais avec préfixe, comment faire pour que seuls certaines tables soient concernées ?

Et question bonus, comment drupal si retrouve après ? est-ce que par exemple si la table users est partagée, un champs permettant de savoir à quel site "appartiennent" les usagers se crée ? cela me paraît énorme, non ?

Timothée

Juste une petite question en plus.
J'ai suivi un tuto pour installer Drupal en multisites où il était dit qu'il ne fallait pas utiliser l'installation dans le répertoire Default mais que dès le premier site, il fallait créer un répertoire du nom utilisant le nom de domaine principal.
Et sur d'autres sites, ils disent que pour la première installation, il faut utiliser le répertoire Default.
Où se trouve donc la vérité ???
Est-ce que cela change quelque chose où bien c'est équivalent ???

Merci d'avance pour vos réponses à cette question supplémentaire :)

Tchuss, @+, jinpol...

Cf. le fichier Settings.php. Tout est dedans. C'est lui qui définit où le site va piocher.

Exemple :
* $db_prefix = array(
* 'default' => 'main_',
* 'users' => 'shared_',
* 'sessions' => 'shared_',
* 'role' => 'shared_',
* 'authmap' => 'shared_',
* );

A toi de définir table à table en faisant bien attention : toutes les tables ne sont pas indépendantes (certaines ont des relations entre elles).