Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/11/2011, 15h49   #1
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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.
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/11/2011, 17h21   #2
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
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 :
1
2
3
<?php
header('Content-type:image/jpg');
readfile('image.jpg');
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/11/2011, 09h38   #3
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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.
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 12h15   #4
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
Citation:
Est-ce possible avec un htaccess ?
Non je pense pas. Tu vas devoir le faire à la main avec des enregistrements en base.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 19h50   #5
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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.
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/11/2011, 21h35   #6
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

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

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Regarde cette excellente classe pour ce dont tu veux. je l'ai utilisé pour un même souci.

Meilleures salutations.
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 22/11/2011, 10h45   #7
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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 :
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
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/11/2011, 16h26   #8
Membre éclairé
 
Homme Gérard Okono
Développeur Web
Inscription : juillet 2006
Messages : 711
Détails du profil
Informations personnelles :
Nom : Homme Gérard Okono
Localisation : Cameroun

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

Informations forums :
Inscription : juillet 2006
Messages : 711
Points : 328
Points : 328
Un truc de ce genre
Code :
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);
	}
}
okoweb est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/11/2011, 20h59   #9
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 09h23   #10
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
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.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 09h53   #11
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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.
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 10h30   #12
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Citation:
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.

Citation:
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 ...)

Citation:
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

Citation:
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.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 12h25   #13
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
Citation:
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.

Citation:
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.

Citation:
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ù...

Citation:
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.
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 14h05   #14
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
Citation:
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 :
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.

Citation:
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.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/11/2011, 20h49   #15
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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 ?
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 09h08   #16
Expert Confirmé
 
Avatar de grunk
 
Homme Olivier
Développeur Web
Inscription : août 2003
Messages : 1 837
Détails du profil
Informations personnelles :
Nom : Homme Olivier
Âge : 27
Localisation : France, Côte d'Or (Bourgogne)

Informations professionnelles :
Activité : Développeur Web
Secteur : Industrie

Informations forums :
Inscription : août 2003
Messages : 1 837
Points : 3 318
Points : 3 318
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.
grunk est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/11/2011, 13h33   #17
Modérateur
 
Avatar de Benjamin Delespierre
 
Benjamin Delespierre
Développeur Web
Inscription : février 2010
Messages : 2 991
Détails du profil
Informations personnelles :
Nom : Benjamin Delespierre
Âge : 24
Localisation : France

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

Informations forums :
Inscription : février 2010
Messages : 2 991
Points : 5 032
Points : 5 032
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.
__________________
A la recherche d'un framework MVC facile a prendre en main ? Essayez Axiom
Nouveau: la référence d'Axiom est disponible sur GitHub (je la peaufine en ce moment même).

Un problème correctement identifié est à moitié résolu, évitez de poster l'intégralité de votre code avec pour seule explication "ça ne marche pas...".
Pour identifier correctement vos problèmes PHP, utilisez la gestion des erreurs et xdebug.

Les boutons et existent, servez-vous en
Benjamin Delespierre est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/12/2011, 10h24   #18
Membre actif
 
Homme
Inscription : avril 2011
Messages : 426
Détails du profil
Informations personnelles :
Sexe : Homme

Informations forums :
Inscription : avril 2011
Messages : 426
Points : 171
Points : 171
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 !
heretik25 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h17.


 
 
 
 
Partenaires

Hébergement Web