2016-09-17 52 views
6

Nie mogę znaleźć tego w dokumentacji. Jak przekierować nieautoryzowanego użytkownika?Zasady Laravel 5.3, jak przekierowywać nieautoryzowanych użytkowników

RolePolicy.php

class RolePolicy 
{ 
    use HandlesAuthorization; 

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

RolesController.php

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

góry dzięki

+0

Dlaczego to wygrywa? :(co jest nie tak? –

Odpowiedz

2

O ile wiem, to nie różni się w nim jako laravel 5.3 jest w dowolnej wersji Laravel 5.

Jest pośredniczącego droga nazwie auth, który odnosi się do App\Http\Middleware\Authenticate (zdefiniowane w aplikacji/HTTP/Kernel.php)

W tej klasie:

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

to auth warstwy pośredniej może być zastosowana do tras, które wymagają uwierzytelnienia .

Więcej o middleware tutaj: https://laravel.com/docs/5.3/middleware

Czytaj więcej o uwierzytelnianiu tutaj: https://laravel.com/docs/5.3/authentication

+1

ale chcę autoryzować za pomocą kontrolerów https://laravel.com/docs/5.3/authorization#via-controller-helpers –

+0

Sprawdź to https://laracasts.com/discuss/channels/laravel/policy -autoryzuj-przekierowanie-zamiast-403 –

4

Można zmodyfikować plik app\Exceptions\Handler.php

funkcję render:

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

Jeśli chce aby wstawić 403, użyj funkcji pomocnika response(). Widać dokumentacje do odpowiedzi tutaj https://laravel.com/docs/master/responses

Zasadniczo można użyć powyżej rozwiązania grać z większą liczbą opcji. Ale najprostszym sposobem jest utworzenie pliku widoku: errors/403.blade.php, a widok ten zostanie automatycznie załadowany po wystąpieniu nieautoryzowanych wyjątków. To samo będzie działać, gdy 404 nie zostanie znaleziony, po prostu stwórz 404.blade.php.