-
Script de téléchargement
Bonjour,
Je travaille dans un contexte d'espace public ou d'espace privé.
Chaque espace peut abriter divers documents (avi, doc, jpg etc...)
Pour accéder à ces documents il faut arriver sur une page dédiée à cet effet dans chaque espace (il faut au préalable se connecter, s'ensuit une procédure de vérification pour savoir si l'utilisateur peut accéder suivant les droits qui lui sont accordés)
Tout cela fonctionne bien mais voici mon problème :
Si j'essaye d'accéder à un document (le télécharger) en entrant directement l'url menant à ce doc (ex : http://monsite/monEspace/document.doc ) cela fonctionne même si aucun utilisateur n'est connecté ou n'a pas les droits.
Je ne vois pas comment empêcher cela.
Existe-t-il quelque chose pour gérer ce genre de problème en symfony ?
Merci.
-
Bonjour,
Tu devrais commencer par rendre le dossier contenant les fichiers inaccessible en configurant apache (ou simple deny dans le .htaccess) ou carrément stocker les fichiers hors du dossier publique (i.e "data/").
Ensuite, tu sers les fichiers au travers d'un contrôleur. Ainsi tu peux facilement gérer les droits d'accès...
-
L'avantage de symfony c'est que il est très modulable et malléable.
Dans un premier temps, il faut mettre les fichiers dans une partie de l'arborescence qui ne soit pas accessible par le net, comme l'application symfony est stockée hors de portée des utilisateurs.
Une des forces de symfony est le routage, en effet, tu peux autoriser avec le paramètre sf_format, des extensions différentes que le .html.
Après, il va falloir écrire le code pour récupérer et envoyer le fichier.
J'ai trouvé un bout de code sur le forum anglais, il est compréhensible facilement, même s'il devra être un peu adapté pour ta solution.
Le code pour envoyer un fichier.
-
Merci pour ton code mimi,
en effet en remaniant un peu cela et en complant avec quelques directives .htaccess je devrais pouvoir m'en sortir.
Je vous tiendrai au courant.
-
Je me suis inspiré du code que tu as proposé mimi et cela fonctionne bien.
Sauf dans le cas d'une image. En effet je ne souhaite pas proposer l'image au téléchargement mais juste l'afficher à l'aide de thickbox.
Or cela ne fonctionne pas... Lorsque que j'enleve le class="thickbox" je vois mon image dans un nouvel onglet. Mais sinon j'ai une erreur.
Si quelqu'un connait bien thickbox il pourrait m'apporter de l'aide.
-
Es-tu certain de renvoyer le bon content-type ?
Sinon, si tu es en environnement de développement, n'oublie pas de désactiver la "debug bar" dans le contrôleur qui sert les fichiers :
Code:
sfConfig::set('sf_web_debug', false)
-
@Tonio 76
Dans le code donné pour le retour de fichier il n'y a pas de passage par le template, donc pas de barre de debug chargée (ce qui peut, parfois, être problématique pour le débug).
Je n'ai jamais utilisé thickbox mais je pense qu'il faut que tu passes en deux fois. Une fois d'une manière standard, ce qui va t'afficher ton formulaire en html avec la liste des images qui devrons être affichées dans la thickbox.
En temps normal, le système irait chercher les images dans un dossier du serveur, ici tu interceptes la demande avec le même code qu'avant dans un deuxième contrôleur qui retourne l'image. Et plus probablement, dans une multitude de contrôleurs, un par image.
-