【问题标题】:middleware on role Zizaco/entrust on controller but if user dont have the role it gives HttpException控制器上角色 Zizaco/entrust 的中间件,但如果用户没有角色,它会给出 HttpException
【发布时间】:2018-07-06 14:56:13
【问题描述】:

所以在我的 laravel 项目中,我有 3 个角色管理员员工供应商,每个角色都有控制器在控制器中我已经放置了角色的中间件,它工作没问题,但我不喜欢用户没有的东西它给 HttpException 错误的角色我如何改变而不是给用户 HttpException 重定向他回来或 404 未找到页面继承我的控制器

public function __construct()
{
    $this->middleware('auth');
    $this->middleware('role:employee');
}

【问题讨论】:

    标签: php laravel middleware roles entrust


    【解决方案1】:

    任何小的异常处理自定义都可以在 App\Exceptions\Handler 的 render() 函数中完成。在这种情况下,您可能会在该渲染函数中执行类似的操作。

    //change all 403's to 404's
    if($exception->getCode() == 403){
        throw new NotFoundHttpException();
    }
    

    【讨论】:

      【解决方案2】:

      您可以在角色检查发生之前检查用户是否在闭包中间件中具有任何角色

      // your controller 
      public function __construct()
      {
          $this->middleware('auth');
          $this->middleware(function ($request, $next) {
              return !auth()->user()->role ? redirect->back() : $request($next);
          });
          $this->middleware('role:employee');
      }
      

      或者在异常处理程序类中添加对 HttpException 的检查并从那里重定向。

      【讨论】:

      • 好吧,用户有一个角色,但不是正确的角色,我从处理程序进行了重定向,它起作用了
      • 对于 Laravel 5.4,$request($next) 应该更改为 $next($request),否则会出现 Function name must be string 问题。不确定其他 Laravel 版本。
      猜你喜欢
      • 2019-10-14
      • 1970-01-01
      • 2017-02-05
      • 2015-04-03
      • 2016-07-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-08-24
      相关资源
      最近更新 更多