Laravel授权()混淆

Phi*_*oss 4 php laravel laravel-5

我目前正在将一个项目从CodeIgniter迁移到Laravel5.

我在Laracasts中看到,您可以Request::authorize()在调用控制器之前使用该方法来授权访问,并返回true或false.

这将(我认为)是理想的解决方案,因为我可以在请求中包含权限检查,而不是通过权限检查和重定向/响应污染控制器.

唯一的问题是,当我falseauthorize()它返回时,它只是加载一个带有forbidden书面的空白页,我在laravel.com上找不到关于如何模板的任何文档(要么没有文档,要么我忽略它)

我知道我可以编辑404页面errors/404.blade.php,但我无法弄清楚如何自定义403页面,我试图添加一个自定义403.blade.php页面,但不会显示.(https://mattstauffer.co/blog/laravel-5.0-custom-error-pages)

将这些权限检查放在请求中是个好主意吗?或者我错过了什么?

更新 我运行了一个回溯authorize(),看起来它抛出了一个UnauthorizedException延伸RuntimeException.我试过在routes.php文件中捕获这两个,这也不起作用.

我也试图创建中间件,并从一个方法调用中间件,这也不起作用,因为中间件甚至根本没有被调用.

更新2 好的,所以我发现我只能$this->middleware()从构造函数调用,而不是单个方法,这是进步,我猜.

Con*_*hol 6

我所做的是forbiddenResponse()为Request抽象类添加一个方法.您可以从该方法返回响应对象以呈现人类可读错误.

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Http\JsonResponse;

abstract class Request extends FormRequest {

    public function forbiddenResponse()
    {
        return new JsonResponse('Unauthorized', 403);
        // or return Response::make('Unauthorized', 403);
    }
}
Run Code Online (Sandbox Code Playgroud)