2014-04-21 5 views
0

Disons que je veux faire une application où les utilisateurs peuvent télécharger des fichiers privés sur un site Web laravel. Je ne veux pas rendre leurs fichiers disponibles au public, mais je veux qu'ils soient en mesure de télécharger les fichiers après leur connexion.Laravel - Restreindre certains téléchargements en utilisant l'authentification

Je dois donc vérifier qu'ils se sont connectés, et qu'ils ont le bon compte ID pour télécharger un fichier spécifique. Comment puis-je créer cette restriction? J'ai regardé autour de http://laravel.com/docs sans succès, et avec google search, je n'ai pu obtenir que quelques exemples de PHP en vanille, mais il semble désordonné d'intégrer dans laravel, de quelle manière me recommandez-vous de faire cela? J'ai peut-être trop compliqué la situation dans ma tête, peut-être que je pourrais faire une table dans la base de données avec l'ID de compte et le chemin vers le fichier, et utiliser Response :: download ($ pathToFile); Et restreindre le dossier des fichiers téléchargés avec .htaccess non autorisé? (En supposant que laravels Response :: méthode de téléchargement contourne .htaccess) Mais même si cela fonctionne, il serait probablement préférable de trouver un moyen de le faire sans. Htaccess pensé?

Modifier Je suppose que je vais stocker les fichiers dans la base de données blob, et le charger à partir de là. De cette façon, je peux facilement faire une validation d'autorisation.

Répondre

0

Vous pouvez restreindre l'accès à télécharger des pages en utilisant un filtre basé modèle

Route::filter('download', function() 
{ 
    //here you check if the user is logged in 
    if(!Auth::check()){ 
     return 'you should be logged in to access the download page'; 
    } 
}); 

Route::when('download/*', 'download'); 

Cochez la documentation pour plus de détails

+0

Oui Je sais limiter les pages, mais pas les fichiers, comment limiter les fichiers? Donc, seul l'utilisateur peut voir etc myphoto.png ou myarchive.zip? Où le lien d'URL publique pour ce fichier particulier est uniquement disponible pour cet utilisateur? – user2551614

+0

ok, je ne sais pas s'il y a un moyen de faire ça avec laravel. Vous pouvez restreindre l'accès au fichier en désactivant l'accès direct aux fichiers sur votre serveur Web. Si vous utilisez Apache, jetez un oeil à ceci: http://stackoverflow.com/questions/10236717/htaccess-how-to-prevent-a-file-from-direct-url-access –

+0

Masquer un fichier ne vous aide pas beaucoup une fois le lien est exposé en ce qui concerne la sécurité? Peut-être que l'enregistrement et le chargement de fichiers directement à partir de la base de données comme blob est la seule façon d'y aller? Cela semble un peu effrayant en ce qui concerne la performance SQL tho. :/ Je ne veux pas non plus compter sur .htaccess pour que la solution soit indépendante sur le serveur web. (etc Lighttpd, nginx). – user2551614

5

Tout ce que vous avez à faire est tout simplement stocker des fichiers dans le répertoire privé (par exemple./app/fichiers) et définir les en-têtes corrects.

$name = 'name.zip'; 
    $file = '/app/files/name.zip'; 

    $header = array(
     'Content-Type' => 'application/octet-stream', 
     'Content-Disposition' => 'attachment', 
     'Content-lenght' => filesize($file), 
     'filename' => $name, 
    ); 

    // auth code 
    return Response::download($file, $name, $header); 
Questions connexes