Laravel 5.3策略如何重定向未授权用户

Kri*_* MP 9 php acl laravel-5.3

我在文档上找不到它.如何重定向未授权用户?

RolePolicy.php

class RolePolicy
{
    use HandlesAuthorization;

    public function manageRoles(User $user)
    {
        return $user->isAdmin();
    }
}
Run Code Online (Sandbox Code Playgroud)

RolesController.php

function __construct()
{
    $this->authorize('manageRoles', Role::class);
}
Run Code Online (Sandbox Code Playgroud)

提前致谢

小智 8

你可以修改文件 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);
}
Run Code Online (Sandbox Code Playgroud)

如果要放置403,请使用辅助函数response().您可以在https://laravel.com/docs/master/responses中查看回复文档

基本上,您可以使用该解决方案来玩更多选项.但最简单的方法就是创建一个视图文件:errors/403.blade.php当您遇到未经授权的异常时,该视图将自动加载.同样适用于404未找到,只需创建404.blade.php.


Dev*_*von 3

据我所知,这在 Laravel 5.3 中与 Laravel 5 的任何版本中没有什么不同。

有一个名为auth引用的路由中间件App\Http\Middleware\Authenticate(在app/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);
}
Run Code Online (Sandbox Code Playgroud)

auth中间件可以应用于需要认证的路由。

在这里阅读有关中间件的更多信息:https ://laravel.com/docs/5.3/middleware

在此处阅读有关身份验证的更多信息:https ://laravel.com/docs/5.3/authentication