加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

php – Laravel授权()混淆

发布时间:2020-12-14 19:44:12 所属栏目:大数据 来源:网络整理
导读:我目前正在将一个项目从CodeIgniter迁移到Laravel5. 我在Laracasts中看到,您可以在调用控制器之前使用Request :: authorize()方法来授权访问,并返回true或false. 这将(我认为)是理想的解决方案,因为我可以在请求中包含权限检查,而不是通过权限检查和重定向/
我目前正在将一个项目从CodeIgniter迁移到Laravel5.

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

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

唯一的问题是,当我从authorize()返回false时,它只是加载一个带有禁止写入的空白页,我在laravel.com上找不到任何关于如何模板化的文档(要么没有文档,要么我忽略了它)

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

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

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

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

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

解决方法

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

namespace AppHttpRequests;

use IlluminateFoundationHttpFormRequest;
use IlluminateHttpJsonResponse;

abstract class Request extends FormRequest {

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读