【问题标题】:Laravel Middleware, one or another?Laravel 中间件,一个还是另一个?
【发布时间】:2016-05-22 16:00:19
【问题描述】:

我有一个控制器,我在我的控制器中使用了 3 个中间件。

public function __construct(){
    $this->middleware('auth');
    $this->middleware('isAgency');
    $this->middleware('isAdmin');
}

问题是 Laravel 一次应用所有这些....如果我以管理员身份登录,我无法打开索引,如果我再次以代理身份登录,我将无法打开索引. 我想要的是用户可以是管理员或代理来访问此控制器内的所有功能。

那么有什么方法可以应用一个或另一个中间件吗? 喜欢if(isAdmin || isAgency)

【问题讨论】:

    标签: php laravel


    【解决方案1】:

    有选项可以做到这一点
    选项 1: 最简单的方法是创建一个包含这三个中间件的新中间件。例如

    public function handle($request, Closure $next)
    {
       // either one of this meet
       if (Auth::user()->isAgency() || Auth::user()->isAdmin) {
           return $next($request);
       } 
    
       // return the response
    }
    


    选项 2: 是使用仅适用于 laravel 5 的中间件的参数。* laravel middleware parameters

    【讨论】:

      【解决方案2】:

      很简单,你可以为三个中间件声明三个不同的控制器

      这可以用于auth控制器

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

      这可用于isAdmin控制器

      public function __construct(){
        $this->middleware('isAdmin');
      }
      

      这可以用于isAgency控制器

      public function __construct(){
        $this->middleware('isAgency');
      }
      

      【讨论】:

      • 是的,这和我现在的很相似!如果我想打开一些视图,我需要成为那个特定的用户......但我不想让管理员用户能够访问任何地方!
      【解决方案3】:

      我已经通过这个解决方案在一个控制器中使用 2 个中间件解决了我的问题:

      在我之前的中间件文件中:

      public function handle($request, Closure $next)
      {
      
          if (Auth::user()->isAgency()) {
              return $next($request);
          } 
      
          abort(403);
      }
      

      现在我添加了 isAdmin() 中间件,因此管理员可以访问所有内容:

      public function handle($request, Closure $next)
      {
      
          if (Auth::user()->isAgency() || Auth::user()->isAdmin()) {
              return $next($request);
          } 
      
          abort(403);
      }
      

      在控制器内部我只使用中间件 isAgency 并且还包括管理员

      public function __construct(){
          $this->middleware('auth');
          $this->middleware('isAgency');
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-31
        • 1970-01-01
        • 2017-02-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-11-12
        • 1970-01-01
        相关资源
        最近更新 更多