2016-09-17 2 views
6

Ich kann es nicht auf der Dokumentation finden. Wie kann man nicht autorisierte Benutzer umleiten?Laravel 5.3 Richtlinien, wie nicht autorisierte Benutzer umgeleitet werden

RolePolicy.php

class RolePolicy 
{ 
    use HandlesAuthorization; 

    public function manageRoles(User $user) 
    { 
     return $user->isAdmin(); 
    } 
} 

RolesController.php

function __construct() 
{ 
    $this->authorize('manageRoles', Role::class); 
} 

Vielen Dank im Voraus

+0

Warum wird es abstimmen? :(Was ist los? –

Antwort

2

Soweit ich weiß, das ist nicht anders in Laravel 5.3, wie es ist ist in jeder Version von Laravel 5.

eine Route Middleware auth Es gestattet die (definiert in App/HTTP/Kernel.php)

In dieser Klasse App\Http\Middleware\Authenticate bezieht:

public function handle($request, Closure $next, $guard = null) 
{ 
    if (Auth::guard($guard)->guest()) { 
     if ($request->ajax()) { 
      return response('Unauthorized.', 401); 
     } else { 
      return redirect()->guest('login'); 
     } 
    } 

    return $next($request); 
} 

Diese auth Middleware zu Routen, die eine Authentifizierung erfordern, angewendet werden kann, .

mehr über Middleware Lesen Sie hier: https://laravel.com/docs/5.3/middleware

Lesen Sie mehr über Authentifizierung hier: https://laravel.com/docs/5.3/authentication

+1

aber ich möchte über Controller autorisieren https://laravel.com/docs/5.3/authorization#via-controller-helpers –

+0

Überprüfen Sie diese https://laracasts.com/discuss/channels/laravel/policy -authorize-redirect-statt-von-403 –

4

Sie Datei ändern können app\Exceptions\Handler.php

auf der Render-Funktion:

public function render($request, Exception $e) 
{ 

    /**modified part**/ 
    if ($request->wantsJson()) { 
     return response([ 
      'success' => false, 
      'message' => $e->getMessage() 
     ], 404); 
    } 

    if ($e instanceof AuthorizationException) { 
     return redirect('path'); 

     //or simply 
     return view('errors.forbidden'); 
     //but this will return an OK, 200 response. 
    } 
    /**end of modified part**/ 

    return parent::render($request, $e); 
} 

Wenn Sie will Um einen 403 zu setzen, benutzen Sie die Hilfsfunktion response(). Sie können die Dokumentationen für Antworten finden Sie hier https://laravel.com/docs/master/responses

Grundsätzlich Sie obige Lösung verwenden können mit mehr Optionen zu spielen. Aber der einfachste Weg ist, eine View-Datei zu erstellen: errors/403.blade.php und diese Ansicht wird automatisch geladen, wenn Sie nicht autorisierte Ausnahmen treffen. Das gleiche funktioniert für 404 nicht gefunden, erstellen Sie einfach die 404.blade.php.

Verwandte Themen