IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Création de dossiers pour stocker des images et gestion des droits


Sujet :

PHP & Base de données

  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut Création de dossiers pour stocker des images et gestion des droits
    Bonjour,

    J'aimerais que vous m’éclaireriez de vos lumières par rapport à ma problématique.

    J'ai un script qui permet de créer un article. Il est possible d'ajouter des images à cet article. Un outil permet de les envoyer sur le serveur et de créer des miniatures.

    L'objectif est de créer un dossier par utilisateur (renommé par son id) puis des sous dossiers par catégorie d'article. Dans les catégories d'article, on pourrait alors créer un dossier par article qui pourrait porter le nom de l'identifiant de l'article.

    Cela permettra à l'utilisateur d'ajouter des photos dans le même dossier afin de modifier l'article sans se demander dans quel dossier il doit envoyer les photos et/ou récupérer celles qu'il a déjà envoyées.

    La question est la suivante : Comment empêcher un utilisateur d'aller fouiner dans les dossiers des autres utilisateurs ?

    Par avance, merci de votre aide.

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Hello

    Une solution pourrait être d'interdire l'accès direct au répertoire en ajoutant une règle dans un .htaccess (voir Order Deny,Allow) et de ne charger les images qu'au travers de script PHP qui, dans la foulée, vérifieraient les droits du membre sur l'image.

    Voici comment procéder à l'affichage de l'image en PHP:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <?php
    header('Content-type:image/jpg');
    readfile('image.jpg');

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Bonjour,

    Merci pour votre réponse.

    Comment tester que l'image appartient à l'utilisateur ? Avec readfile() ?

    Il faudrait (à mon avis) juste interdire les dossiers ne portant pas le nom de son id. Qu'en pensez-vous ?

    Est-ce possible avec un htaccess ?

    Par avance, merci.

  4. #4
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Est-ce possible avec un htaccess ?
    Non je pense pas. Tu vas devoir le faire à la main avec des enregistrements en base.

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Comment comparer le nom d'un dossier avec l'id de l'utilisateur. Est-ce simplement envisageable ?

    Si l'utilisateur n'est pas dans le dossier "2"

    alors => exit ();

    En fait, pour la gestion des images, j’utilise un plugin de tinymce qui utilise fancyupload :

    Le plugin permet d'envoyer des photos et de les insérer dans le wysiwyg en ouvrant un explorateur. Il faudrait que je sois capable d'ouvrir le plugin dans le bon dossier et que l'utilisateur ne puisse pas se balader ailleurs que dans son dossier.

    Sachant que l'arborescence sera :

    -id_utilisateur =>2
    --type_article =>5
    ---id_article =>110

    A ce jour j'arrive à créer automatiquement les bons dossiers et y envoyer les images.

    Il me reste donc le fait d'ouvrir le plugin dans le bon dossier et à restreindre l'exploration.

    Bref, si des personnes pouvaient m'aider, on pourrait avoir un système d'image permettant de gérer la création d'article avec une gestion multi-utilisateur.

  6. #6
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Regarde cette excellente classe pour ce dont tu veux. je l'ai utilisé pour un même souci.

    Meilleures salutations.

  7. #7
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Citation Envoyé par okoweb Voir le message
    Regarde cette excellente classe pour ce dont tu veux. je l'ai utilisé pour un même souci.

    Meilleures salutations.
    Bonjour,

    Merci pour la classe. Cependant, je souhaite adapter l'outil que je possède et donc la classe fancyupload2.

    Apparemment, ce serait cette fonction qui génère l'explorateur :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    function __construct() {
    		define(DIR, $_SERVER['DOCUMENT_ROOT'].'/');
     
    		// ATTENTION!
    		// You need to check the session here, because methods of this class can be danger to security!
    		// Ajoutez ici la sécurité permettant de restreindre l'accès à l'explorateur
     
     
    		$this->restrict = $this->folder;
    		if ( isset($_SESSION['tiny_folder']) ) 
    			$this->folder = $_SESSION['tiny_folder'];
    		else
    			$this->folder = $this->folder;
    		$this->addressBar();
    		$this->mainField();
    	}
     
    	private function leftPanel() {
    		$ret = array();
    		if ($handle = opendir ( DIR.$this->folder )) {
    			while (false !== ($file = readdir ( $handle ))) {
    				if (is_dir(DIR.$this->folder.'/'.$file) && $file != '.') {
    					$ret[] = array(
    						'path' => $file,
    						'name'	=> $file
    					);
    				}
    			}
    			closedir ($handle);
    		}
    Comment pourrait-ton restreindre l'utilisateur à son dossier ?

    Par avance merci de votre aide

  8. #8
    Membre confirmé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Juillet 2006
    Messages
    985
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juillet 2006
    Messages : 985
    Points : 460
    Points
    460
    Par défaut
    Un truc de ce genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if ( isset( $_SESSION['user'] ) ) {
    	if ( $dir = @opendir($_SESSION['user']['id']) ) {
    		while(($f = readdir($dir)) !== FALSE) {
    		//ton code
    		}
    		closedir($dir);
    	}
    }

  9. #9
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Bonsoir,

    Merci pour ce morceau de code.

    Quand tu mets en commentaire //ton code.

    Pourrais tu me dire ce que tu pensais y mettre.

    Merci

  10. #10
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 224
    Points
    20 224
    Par défaut
    A mon avis tu n'a pas la bonne reflexion sur la facon de gérer tes images.

    Perso j'aurais toutes mes images dans un seul et même dossier (voir des sous dossiers si c'est pertinant) et en bdd tu associe chaque image aux articles. Un article étant associé à un utilisateur tu sera en mesure de n'afficher que les images d'un utilisateur.
    Gérer les droits au niveau du système de fichier ça revient à créer des utilisateurs systèmes et de modifier le chmod et le chown des fichiers , c'est ingérable.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Bonjour,

    Sauf que si je fais comme cela, c'est qu'il y a une contrainte particulière.

    En effet, mon site permet de géolocaliser les photos en jpg émises par l'utilisateur. De ce fait le script scan un dossier en particulier pour y extraire les données EXIF et y associer une coordonnée GPS issues d'un fichier GPX. Je ne voudrais pas géolocaliser les images d'une autre balade et scanner toutes les images à chaque fois.

    Ensuite, est-ce possible/efficace de filtrer les potentiels centaines/milliers d'images dans un même dossier pour ne montrer que les photos de l'utilisateur et de son article ?

    Je pensais qu'il serait plus simple d'accorder un dossier par utilisateur et de le brider à l'intérieur. Dans ce dossier, il y aurait des sous dossiers par type d'article et pour chaque type d'article un sous dossier portant le numéro de l'article.

    Un plugin image tinymce permettra ensuite d'envoyer les images dans le bon dossier et d'ouvrir ce dernier en cas de màj.

    Merci de me dire quelle solution serait la plus intéressante à mettre en place sachant qu'il me reste dans mon cas juste à brider l'utilisateur dans son dossier.

  12. #12
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 224
    Points
    20 224
    Par défaut
    En effet, mon site permet de géolocaliser les photos en jpg émises par l'utilisateur. De ce fait le script scan un dossier en particulier pour y extraire les données EXIF et y associer une coordonnée GPS issues d'un fichier GPX. Je ne voudrais pas géolocaliser les images d'une autre balade et scanner toutes les images à chaque fois.
    En quoi est ce une contrainte d'utiliser une bdd pour gérer tes images ? Tu seras en mesure de récupérer les images tout pareil (elle sont toujours sur le disque). La base ne sert qu'a stocker leur chemin, faire le lien avec l'utilisateur et dans ton cas pourquoi pas leur coordonnées GPS. Ca pourrait par exemple te permettre de ressortir toutes les photos d'une même zone géographique.

    Ensuite, est-ce possible/efficace de filtrer les potentiels centaines/milliers d'images dans un même dossier pour ne montrer que les photos de l'utilisateur et de son article ?
    Tout dépend ce que l'on appel filtrer. Encore une fois avec une bdd tu auras tous les chemin des images appartenant à l'utilisateur X très facilement. Ca sera pas plus rapide que le scan d'un dossier lui appartenant mais ça sera plus souple à utiliser dès que tu vas avoir des filtres à appliquer (date , position, article ...)

    Je pensais qu'il serait plus simple d'accorder un dossier par utilisateur et de le brider à l'intérieur. Dans ce dossier, il y aurait des sous dossiers par type d'article et pour chaque type d'article un sous dossier portant le numéro de l'article.
    C'est une solution mais ça veux dire que tu dois gérer toutes la logique avec les numéros d'article. Si jamais un numero d'article change pour une raison x ou y il faut que ce soit prévu. Encore une fois avec une bdd et les contrainte nécessaire sur les tables tous va se faire tout seul

    Merci de me dire quelle solution serait la plus intéressante à mettre en place sachant qu'il me reste dans mon cas juste à brider l'utilisateur dans son dossier.
    Si tu as déjà tout fait effectivement ça serai ballot de recommencer. Pour bloquer un utilisateur dans sont dossier suffit de vérifier quel dossier il essai d'ouvrir. Si il correspond à son id (par exemple) ok sinon erreur.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  13. #13
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    En quoi est ce une contrainte d'utiliser une bdd pour gérer tes images ? Tu seras en mesure de récupérer les images tout pareil (elle sont toujours sur le disque). La base ne sert qu'a stocker leur chemin, faire le lien avec l'utilisateur et dans ton cas pourquoi pas leur coordonnées GPS. Ca pourrait par exemple te permettre de ressortir toutes les photos d'une même zone géographique.
    Effectivement.

    Tout dépend ce que l'on appel filtrer. Encore une fois avec une bdd tu auras tous les chemin des images appartenant à l'utilisateur X très facilement. Ca sera pas plus rapide que le scan d'un dossier lui appartenant mais ça sera plus souple à utiliser dès que tu vas avoir des filtres à appliquer (date , position, article ...)
    Si je mets toutes les photos dans le même dossier, est-ce du monde du possible qu'un utilisateur ne voit dans l'explorateur tout d'abord que ses photos mais aussi et surtout que les photos de l'article.

    C'est une solution mais ça veux dire que tu dois gérer toutes la logique avec les numéros d'article. Si jamais un numero d'article change pour une raison x ou y il faut que ce soit prévu. Encore une fois avec une bdd et les contrainte nécessaire sur les tables tous va se faire tout seul
    Effectivement, si un numéro d'article se met à changer, le dossier photo ne sera plus accessible. Il faudra donc une moulinette permettant un changement du nom du dossier au cas où...

    Si tu as déjà tout fait effectivement ça serai ballot de recommencer. Pour bloquer un utilisateur dans sont dossier suffit de vérifier quel dossier il essai d'ouvrir. Si il correspond à son id (par exemple) ok sinon erreur.
    Pas facile la vie de développeur amateur si vous connaissez un système intégré à un éditeur de texte wysiwyg, qui permet de gérer les photos dans un contexte multi-utilisateur (même si payant), je suis preneur !

    Merci pour vos conseils.

  14. #14
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 224
    Points
    20 224
    Par défaut
    Si je mets toutes les photos dans le même dossier, est-ce du monde du possible qu'un utilisateur ne voit dans l'explorateur tout d'abord que ses photos mais aussi et surtout que les photos de l'article.
    Oui biensur.
    En partant du principe que tu aura une table avec une référence vesr tes images et un lien vers tes articles/utilisateur tu pourrais par exemple faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT chemin FROM images WHERE id_user = 5 OR id_article = 122;
    Te permettra de récupérer le chemin de toutes les images (du genre /images/truc.jpg) qui appartienne à l'utilisateur 5 ou à l'article 122.

    si vous connaissez un système intégré à un éditeur de texte wysiwyg, qui permet de gérer les photos dans un contexte multi-utilisateur (même si payant), je suis preneur !
    Je n'en connais pas mais peut être regarder du coté des cms orientés publication multi utilisateur , ils ont sans doute quelques chose du genre.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  15. #15
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Bonsoir,

    Je réfléchit toujours sur les deux solution, et...

    Je me demandais comment pourrait on être en mesure de gérer le fait qu'un utilisateur puisse supprimer, renommer une photo. Comment ces modifications pourraient être remontées en base ?

  16. #16
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 691
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 691
    Points : 20 224
    Points
    20 224
    Par défaut
    Chaque photos à une id dans la base. Dans ton explorateur d'image (qui aura été rempli grâce aux infos de la base) il te suffit de savoir quelle image est renommée/supprimée via son id pour appliquer la modification en bdd.

    C'est le même principe que lorsque tu édite un article par exemple , comment fait tu pour savoir quel est l'article modifié ? via son id.
    Pry Framework php5 | N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  17. #17
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Citation Envoyé par heretik25 Voir le message
    Je me demandais comment pourrait on être en mesure de gérer le fait qu'un utilisateur puisse supprimer, renommer une photo. Comment ces modifications pourraient être remontées en base ?
    Fais ça en objet et ça passera comme une lettre à la poste.

  18. #18
    Membre averti
    Homme Profil pro
    Inscrit en
    Avril 2011
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2011
    Messages : 660
    Points : 331
    Points
    331
    Par défaut
    Comme une lettre à la poste, certes ! Faut-il encore être assez compétent pour le construire .

    Si quelqu'un veut partager son système de gestion des photos multi-utilisateur en relation avec un éditeur de texte, je suis preneur et lui serait infiniment reconnaissant !

Discussions similaires

  1. Réponses: 1
    Dernier message: 05/05/2014, 16h05
  2. [Traitement d'image] Où trouver des images pour illustrer mon site ?
    Par langela94 dans le forum Webdesign & Ergonomie
    Réponses: 4
    Dernier message: 24/01/2006, 17h44
  3. [Image] Classe pour stocker une image JPEG ?
    Par elitost dans le forum Entrée/Sortie
    Réponses: 3
    Dernier message: 19/01/2006, 13h34

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo