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

Ce sujet est résolu
177926
,

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éponse

177926
,

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

35326
,

Salut,

Tu protèges ta route avec l'authentification

177926
,

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

17162
,

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.

177926
,

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

177926
,

Route::get('/', 'MorceauController@index');  
Route::get('/morceau/download/{uuid}', 'MorceauController@download')->name('morceau.download');
177926
,

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,



    ));
  }

177926
,

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);
        });
    }

17162
,

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.

177926
,

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
});