1
votes

if else condition dans les routes laravel

Je veux que seul l'utilisateur avec le même nom avec l'ID d'url puisse accéder à l'aide de condition if

Exemple

  • Utilisateur connecté avec le nom jer

  • Il ne doit accéder à l'URL qu'avec / User-Profile / jer

  • Et ne pas accéder à une autre page / profil utilisateur / abc qui ne sont pas égaux à son nom

Faire quelque chose comme Exemple:

 <a href="/dashboard/User-Profile/{{ Auth::user()->name }}">{{ Auth::user()->name 
}}</a>

Comment puis-je comparer {name} de l'url à {auth- > name} ?

Route

 Route::get('/User-Profile/{name}/', 'AccountController@index');

Lame

 if{id}!=={{auth->name}}
 {
  Route::get('NoPermission', 'Restriction@index');
 }
 else
 {
  Route::get('/User-Profile/{name}/', 'AccountController@index');
 }


0 commentaires

4 Réponses :


1
votes

Autorisez l'accès à la page, mais avant d'afficher le contenu, vérifiez si le chemin de l'url est == vers le nom de l'ID.


0 commentaires

4
votes

Vous ne pouvez pas accéder à Auth comme ça dans vos itinéraires, comparez-le plutôt dans votre AccountController:

public function index($name){
    if($name != Auth::user->name()) abort(403);
    else...
}


0 commentaires

2
votes

Dans un fournisseur de services (peu importe lequel, mais ce serait plus clair si cela était fait dans RouteServiceProvider), ajoutez une liaison de route dans la méthode de démarrage comme documenté dans https://laravel.com/docs/6.x/routing#explicit-binding

{{-- Make sure the link is only visible for authenticated users https://laravel.com/docs/6.x/blade#if-statements --}}
@auth
  <a href="{{ route('account_profile', ['name' => auth()->user()->name]) }}</a>
@endauth


0 commentaires

1
votes

En fait, vous pouvez vérifier vos itinéraires comme ceci:

Route::get('/profile/{name}', function(String $name) {
    if (!Auth::check() || $name !== Auth::user()->name) {
        abort(404);
    }
    return view("view.auth.profile", ['profile => App\Profile::where('user_id', '=', Auth::id())->first()]);
});

Cependant, si vous utilisez

Route :: get ('/ profile', ' AuthController @ profile ') -> middleware (' auth ');

et utilisez Auth :: user () dans votre contrôleur pour sélectionner le profil correct.

L'avantage ici est que tous les utilisateurs non authentifiés seront automatiquement redirigés vers votre page de connexion, et il n'est pas nécessaire d'inclure le nom sur le lien de votre profil.


0 commentaires