[RESOLU]Gestion répertoires téléchargement par différentes personnes

michelwmichelw Member
février 2016 modifié dans Entraide et S.A.T
Bonjour,
Je suis enseignant et je souhaite que mes élèves puissent montrer leur projet sur mon site internet pluxml. Pour cela je pensais leur mettre à disposition un dossier dans lequel ils mettent leur fichier html, css,... par ftp. Mon soucis est que je souhaite que les élèves ne puissent avoir accès qu'à leur dossier et n'accèdent à aucun cas à la totalité de l’arborescence. Avez-vous une idée pour gérer cela?

Réponses

  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Bonjour,

    En supposant que ton serveur Web soit Apache et qu tu as les droits pour modifier la config, la directiveUserDir est faite pour cela.
    Voir la documentation
  • Merci pour cette réponse, j'ai effectivement oublié de préciser que mon serveur est sous nginx. Auriez-vous une idée pour celui-ci? En vous remerciant
  • Et si le site est sur un hébergeur auquel on accède par un panneau de contrôle (par le web), la ségrégation se fera au moment de la création d'un compte FTP. Dans l'interface pour créer le compte, on offre la possibilité de diriger l'utilisateur vers un répertoire.
  • StéphaneStéphane Member, Former PluXml Project Manager
    Bonjour

    Tu peux déjà activer l'option dans Paramètres > Configuration avancée > Utiliser un dossier images et documents différent pour chaque utilisateur

    Consultant PluXml

    Ancien responsable et développeur de PluXml (2010 à 2018)

  • Mais ça restreint au répertoire de documents. S'il s'agit de fichiers CSS et HTML, on ne pourra pas les faire démarrer de ce répertoire et les voir "rendre" le contenu de cette relation. Ma suggestion de les maintenir en-dehors de l'installation de PluXml était dans ce but.

    Et pourquoi pas créer une page statique pour chaque élève qui appelle sa propre page HTML brute avec son propre CSS appliqué, tous deux tirés du répertoire de documents. Quel beau concours!

    Attendons une réponse éventuelle du demandeur si l'idée se précise.
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Nginx n'est pas trop évident à configurer.

    Pour des pages statiques, il faut utiliser cette règle :
    [== Indéfini ==]
    location ~ /~(.+)/(.*)$ {
         alias /home/$1/public_html/$2;
    }
    
    et créer un dossier public_html dans le dossier de chaque utilisateur.
    Pour les scripts PHP, c'est moins évident. Il faut que je cherche sur le net. J'ai fait un essai sur un orangepi sous Debian mais cela ne marche pas.
  • cpalocpalo Member
    février 2016 modifié
    Pierre a écrit:
    Et si le site est sur un hébergeur auquel on accède par un panneau de contrôle (par le web), la ségrégation se fera au moment de la création d'un compte FTP. Dans l'interface pour créer le compte, on offre la possibilité de diriger l'utilisateur vers un répertoire.

    Bonjour,
    Par exemple chez mon hébergeur j'ai la possibilité de créer 10 accès FTP secondaires.

    On pourrait donc imaginer créer un dossier travaux-eleves dans le site principal et dans celui-ci les sous-dossiers élèves ( dans mon cas je serai limité à 10 mais on doit pouvoir sans problème trouver d'autres solutions d'hébergement) auquel on attribue cet accès FTP secondaire.
    Et ce sous-dossier élève pourrait même être un pluxml "en entier".

    Ce qui nous donnerait la structure suivante:
    site-principal (pluxml)
    core
    data
    plugins
    thèmes
    travaux-eleves
    eleve-1
    eleve-2 (par exemple un pluxml)

    Cordialement
  • michelwmichelw Member
    février 2016 modifié
    Bonjour,
    L'idée se précise. Effectivement une page statique comme le décrit Pierre m'interesse. Donc une page par projet pour un groupe de 3 à 5 élèves serait la meilleure idée pour que les élèves puissent mettre leur css et html librement. D’où la question comment restreindre l'accès admin à un groupe d'élève pour une page statique?
  • Je ne suis pas certain si le plugin MyPrivateStatic permet plusieurs mots de passe séparés mais ça serait une piste.
  • cpalocpalo Member
    février 2016 modifié
    @michelw

    Une petite précision par rapport à ce que tu souhaites.
    Ton groupe d'élèves n'aurait besoin que de pouvoir rédiger une page statique ?
    Parce que si tu souhaites qu'il puisse mettre leur css il faut qu'ils aient également accès à un dossier où ils transfèrent leur css, à moins de le mettre directement dans leur page statique ( ce qui peut se concevoir si ce n'est pas un css trop long).
  • Bonsoir,
    Effectivement il faudrait avoir un accès à un dossier pour mettre le css. J'ai suivi sur le plugin MyPrivateStatic fil http://forum.pluxml.org/viewtopic.php?id=2923&p=3 cela commence à être compliqué la solution que j'entrevoie est de gérer cela au niveau sftp. Qu'en pensez-vous?
  • Bonjour,

    Il me semble avoir compris que ce n'était pas que la rédaction d'une page que tu voulais permettre à tes élèves. Alors je pense que l'idée de sous-sites correspond plus à ce que tu veux faire et surtout réglerait facilement le problème de droits d'accès suivant les groupes d'élèves.
    Et toi dans ton site, par exemple, tu fais une page statique (travaux d'élèves) où tu peux présenter les travaux d'élèves et indiquer le lien vers ceux-ci.

    Cordialement
  • Bonsoir,
    Effectivement ce n'est pas qu'une page que je souhaite que mes élèves remplissent, il faudrait qu'ils mettent en œuvre du html et du css dans un dossier présentant leur projet. Cela me fait au minimum 5 dossiers qui chacun serait géré par 3 élèves et donc accessibles en lecture écriture par eux. Sachant que ces pages doivent être lisibles pour n'importe quel visiteur du site et que je puisse garder un contrôl total sur leur travaux. Une structure serait effectivement de prévoir 5 sous sites pour chacun des projet plus le mien qui renverrai sur les 5 sites élèves. Cela me semble trop important du moins dans un premier temps. Je vais plutôt me diriger vers une page statique de mon site qui renvoi vers leur dossier en utilisant pour ma page statique http://simplepie.org/ ou plutôt http://moonmoon.org/ qui renvoie au dossier des projets réalisé par les élèves, le tout géré avec http://mysecureshell.sourceforge.net/fr/index.html.
    Qu'en pensez-vous?
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    @michelw,

    Ton serveur tourne sous quel OS ? Windows, Linux, FreeBSD, ...
    As-tu des droits administrateur sur ce serveur ?

    J'ai un serveur NGINX qui tourne sur Debian. Dans ce cas, il est assez facile de créer pour chaque utilisateur ou élève un dossier public_html dans chaque dossier utilisateur qui héberge une version totalement indépendante de Pluxml pour chacun, ou plus simplement de créer un site purement statique sans cms.

    Quelle est la contrainte qui t'oblige à utiliser Nginx ? Ce serveur est un peu plus compliqué à paramétrer que Apache, et il faut corriger légèrement la fonction plxUtils;;getRacine() de Pluxml.

    Tu évoques SimplePie et Moonmoon qui sont 2 bibliothèques pour rassembler des flux RSS mais les pages statiques de Pluxml ne sont pas gérées par les flux RSS.
    Il faut que tu partages un groupe avec tes éléves pour accéder à leurs travaux, à moins de te connecter en root où tu auras tous les super pouvoirs.

    Une installation neuve de Pluxml pèse environ 1.6Mo. Même avec 30 élèves, cela fera seulement 48 Mo. Vu la taille mini des disques durs (500Go). Cela ne pose aucun souci matériel.
  • Je ne connais pas. Je suis allé voir par curiosité. Mais ce n'est pas la même démarche : ce sont des agregateurs de flux rss.
    Mais pourquoi pas.
    Cependant il te faudra quand même créer 5 dossiers différents par ftp et leur donner une adresse pour qu'ils puissent être lisibles par le public ( du genre http:// tondomaine/groupe1 ou http://groupe1.tondomaine). Je ne suis donc pas persuadé que cela soit beaucoup plus simple.
    Et cela depend aussi de l'hébergement que tu as.
    Mais comme je ne connais pas ces solutions que tu proposes, je passe sans doute à côté de toutes leurs possibilités.
    De toute façon il n'y jamais de solution ni parfaite ni unique.

    Cordialement
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    @michelw,

    Voici la config de Nginx qui va bien pour avoir un site web totalement indépendant pour chaque utilisateur de ton serveur :
    [== Indéfini ==]
    location ~ ^/~(?<user>\w+)(?<path>/.*)?$ {
    		alias /home/$user/public_html$path;
    		autoindex on;
    		error_log /var/log/nginx/userdir-$user.log notice;
    		rewrite_log on;
    		location ~ \.php$ {
    			root /home/$user/public_html;
    			fastcgi_split_path_info ^/~\w+(/.+?\.php)(.*)$;
    
    			# return 200  $document_root|$fastcgi_script_name|$query_string|$content_type|$fastcgi_script_name|$request_uri|$path_info|$fastcgi_path_info";
    
    			try_files $fastcgi_script_name =404;
    
    			set $path_info $fastcgi_path_info;
    			fastcgi_param PATH_INFO $path_info;
    
    			fastcgi_index index.php;
    			include fastcgi.conf;
    
    			fastcgi_pass unix:/var/run/php5-fpm.sock;
    		}
    	}
    

    Ces lignes sont à ajouter dans le bloc server {} du fichier /etc/nginx/sites-availables/default sur une distribution Debian/Jessie ou autre Linux.
    Cela remplace la directive UserDir sur un serveur Apache.
    Le fichier complet est disponible ici

    Par contre, il faut corriger les valeurs $dirname et $racine de la fonction plxUtils:getRacine() dans le fichier core/lib/class.plx.utils.php, vers la ligne 568 :
    [== PHP ==]
    $dirname = preg_replace('#(?:core/admin/|plugins/)?[\w-]+\.php$#i', '', explode('?', $_SERVER['REQUEST_URI'])[0]);
    if (substr($dirname, -1) != '/') {
    	$dirname .= '/';
    }
    $racine = $protocol.$servername.$serverport.$dirname;
    
    

    Dans le dossier de chaque utilisateur, il faut créer un dossier public_html. Penser à corriger les droits en écriture pour Pluxml.

    J'ai fait les tests sur un Bananapi.
    Note qu'à côté de Pluxml tu peux créer un site entièrement statique dans un dossier indépendant
  • Merci c'est ce que je cherchais.
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    Tu vas pouvoir profiter des vacances scolaires pour installer Plumxl dans le dossier personnel de chacun de tes élèves de ta classe :lol:
  • bazooka07bazooka07 PluXml Lead Developer, Moderator
    mars 2016 modifié
    @michelw,

    Je te propose un nouveau paramétrage de Nginx pour résoudre ton problème sans avoir à modifier Pluxml. J'ai fait un essai avec la version 5.5-beta3 de Pluxml sous Debian/Jessie.
    [== Indéfini ==]
    # remplace directive userdir de Apache2
    location ~ ^/~(?<user>\w+)(?<path>/.*)?$ {
    	alias /home/$user/public_html$path;
    	autoindex on;
    	access_log /var/log/nginx/userdir-access.log;
    	error_log /var/log/nginx/userdir-error.log;
    	rewrite_log on;
    	location ~ \.php$ {
    		fastcgi_split_path_info ^/~\w+(/.+?\.php)(.*)$;
    		include fastcgi.conf;
    		fastcgi_param SCRIPT_NAME /~$user$fastcgi_script_name;
    		fastcgi_param DOCUMENT_ROOT /home/~$user/public_html;
    		fastcgi_index index.php;
    		fastcgi_pass unix:/var/run/php5-fpm.sock;
    	}
    }
    
    La modif est à faire dans le fichier /etc/nginx/sites-enabled/default
    Voici la copie d'écran d'écran qu'on obtient après un appel à phpinfo():
    phpinfo()%20%E2%80%93%20Chromium_032.jpg
  • Super merci beaucoup
Connectez-vous ou Inscrivez-vous pour répondre.