2016-09-17 1 views
6

Я не могу найти его в документации. Как перенаправить несанкционированного пользователя?Политика Laravel 5.3 как перенаправить неавторизованных пользователей

RolePolicy.php

class RolePolicy 
{ 
    use HandlesAuthorization; 

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

RolesController.php

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

Заранее спасибо

+0

Почему он голосует? :(что не так? –

ответ

2

Насколько я знаю, это ничем не отличается в Laravel 5.3 как это находится в любой версии Laravel 5.

Существует маршрут промежуточного имени auth, который относится к App\Http\Middleware\Authenticate (определено в приложении/HTTP/Kernel.php)

В этом классе:

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

Это auth промежуточного слоя может быть применен к маршрутам, которые требуют проверки подлинности ,

Подробнее о промежуточном слое здесь: https://laravel.com/docs/5.3/middleware

Подробнее о подлинности здесь: https://laravel.com/docs/5.3/authentication

+1

, но я хочу авторизовать через контроллеры https://laravel.com/docs/5.3/authorization#via-controller-helpers –

+0

Проверьте это https://laracasts.com/discuss/channels/laravel/policy -authorize-перенаправлять-вместо-оф-403 –

4

Вы можете изменить файл app\Exceptions\Handler.php

на функции визуализации:

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

Если вы хотите поставить 403, использовать вспомогательную функцию response(). Вы можете увидеть документацию для ответов здесь https://laravel.com/docs/master/responses

В принципе вы можете использовать выше решение, чтобы играть с большим количеством опций. Но самым простым способом является создание файла вида: errors/403.blade.php, и это представление будет автоматически загружено при удалении несанкционированных исключений. То же самое будет работать для 404 не найденных, просто создайте 404.blade.php.