Comment accorder le téléchargement à un utilisateur connecté

Par OOL92, il y a 6 ans


Bonjour,

quel code faut il rajouter pour que seul les personnes connectées puissent télécharger un fichier

Ce que je fais

Route::get('/morceau/download/{uuid}', 'MorceauController@download')->name('morceau.download'); <td><a href="{{ route('morceau.download', $morceau->uuid) }}" class="material-icons mt-2"> archive </a></td> <?php namespace App; use Illuminate\Database\Eloquent\Model; use Webpatser\Uuid\Uuid; class Morceau extends Model { /** * The table associated with the model. * * @var string */ protected $table = 'morceaux'; /** * Setup model event hooks */ public static function boot() { parent::boot(); self::creating(function ($model) { $model->uuid = (string) Uuid::generate(4); }); }

Ce que je veux

Seul les users dans la BDD peuvent télécharger

Ce que j'obtiens

ce code fonctionne mais le soucis c'est que tout le monde peut télécharger ..Merci d'avance pour ce petit coup de main !

10 réponses

Balsakup, il y a 6 ans

Salut,

Tu protèges ta route avec l'authentification

OOL92, il y a 6 ans

Salut,

merci pour ton aide, j 'ai essayé cette solution en le plaçant dans le middeleware et le résultat est resté le même, à moins que je me suis mal pris...

Lartak, il y a 6 ans

Bonjour.
Tu à en effet mal du t'y prendre, mais sans le code concerné, nous auront du mal à t'aider.
Par contre, ça empèchera l'utilisateur non connecté de télécharger un fichier, mais pas à voir le lien, il te faut donc également faire une condition au moment où tu affiches le lien si tu veux éviter que l'utilisateur ne puisse voir le lien qu'il n'est pas censé voir.

OOL92, il y a 6 ans

bonsoir,
oui c'est tout à fait ça, je dois créer une condition mais je ne sais pas comment m'y prendre, le but c'est que cette page reste accessible à tout visiteur sauf pour télécharger un fichier il doit se connecté en tant que user

OOL92, il y a 6 ans
Route::get('/', 'MorceauController@index'); Route::get('/morceau/download/{uuid}', 'MorceauController@download')->name('morceau.download');
OOL92, il y a 6 ans
class MorceauController extends Controller { public function index() { $posts = Morceau::All(); $categories = Categorie::All(); $atmospheres = Atmosphere::All(); $instruments = Instrument::All(); $compositeurs = Compositeur::All(); return View('layouts/morceau')->with(array( "morceaux" => $posts, "atmospheres" => $atmospheres, "categories" => $categories, "instruments" => $instruments, "compositeurs" => $compositeurs, )); }
OOL92, il y a 6 ans
namespace App; use Illuminate\Database\Eloquent\Model; use Webpatser\Uuid\Uuid; class Morceau extends Model { /** * The table associated with the model. * * @var string */ protected $table = 'morceaux'; /** * Setup model event hooks */ public static function boot() { parent::boot(); self::creating(function ($model) { $model->uuid = (string) Uuid::generate(4); }); }
Lartak, il y a 6 ans

Non, le code que tu nous montre est semble t'il celui qui concerne la page sur laquelle tu affiches le lien, ce n'est pas celui-ci qui va nous permettre de t'aider.
Ce serait plutôt celui de la méthode download qui nous serait utile.

OOL92, il y a 6 ans

Les fichiers sont stockés dans un répertoire " storage/app/zic/ ", une aplication use webpatser est installé dans le model pour générer des Uuid dans la BDD autrement la méthode download n'est pas spécifié seul une route et le code html fait le reste

<?php namespace App; use Illuminate\Database\Eloquent\Model; use Webpatser\Uuid\Uuid; class Morceau extends Model { /** * The table associated with the model. * * @var string */ protected $table = 'morceaux'; /** * Setup model event hooks */ public static function boot() { parent::boot(); self::creating(function ($model) { $model->uuid = (string) Uuid::generate(4); }); } <td><a href="{{ route('morceau.download', $morceau->uuid) }}" class="material-icons mt-2"> archive </a></td> <td><i class="material-icons mt-2">share</i></td> </div> </table> </div> <script> // Liste des chansons// aSongs.push("{{url('/morceau/download/' .$morceau->uuid)}}"); var wavesurfer_{{ $loop->index}} = WaveSurfer.create({ container: '#waveform_{{ $loop->index}}', waveColor: 'rgba(119, 119, 121)', progressColor: '#464646', barWidth: 2, barRadius: 2, cursorWidth: 0, height: 42, barGap: 2 });
OOL92, il y a 6 ans

Merci @Balsakup et @lartak j'ai apprécié vos soutien d'avoir essayé de m'aider, j'ai finalement trouvé la solution, c'est rendre visible les buttons de téléchargements lorsque l'utilisateur se connect et disparaisse une fois déconnecté, j'espère que cette méthode ci dessous vous sera utile:
Bien à vous

@if(Auth::check()) <td><a href="{{ route('morceau.download', $morceau->uuid) }}" class="btn btn-outline-secondary btn-sm">MP3</a></td> @endif