2015-06-19 34 views
2

我是Laravel 5中間件的新手 - 我剛剛在我的應用程序中添加了一個新的user type == Dev。我需要爲該用戶類型設置一定的路由限制 - 就他們可以/不能訪問的內容而言。在PHP Laravel 5中配置路由限制的最佳方式是什麼?


所以我創建

DevMiddleware.php

<?php 

namespace App\Http\Middleware; 

use App\Article; 
use Closure, View ; 
use Illuminate\Contracts\Auth\Guard; 

class DevMiddleware 
{ 
    /** 
    * The Guard implementation. 
    * 
    * @var Guard 
    */ 
    protected $auth; 

    /** 
    * Create a new filter instance. 
    * 
    * @param Guard $auth 
    * @return void 
    */ 
    public function __construct(Guard $auth) 
    { 
     $this->auth = $auth; 
    } 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if ($this->auth->getUser()->type !== "Dev") { 
      return View::make('errors.404'); 
     } 

     return $next($request); 
    } 
} 

我註冊在我的

Kernel.php

'dev' => 'App\Http\Middleware\DevMiddleware',


我用它在我的

routes.php文件

$router->group(['middleware' => ['auth', 'admin', 'dev' ] ], function() { 

    //Any routes goes in here 

}); 

當我去的路線在那裏 - 不斷收到404錯誤。

我希望能夠去那些路線。

我在這裏做錯了什麼?我如何解決它 ?

+0

而不是'getUser()'嘗試'user()'。 API聲明'getUser()'返回當前緩存的用戶,我不完全確定這意味着什麼。 'user()'返回當前登錄的用戶,這可能是你真正想要的。 – user3158900

+0

立即嘗試。如果有效,我會盡快回復您。 – ihue

+0

不工作!我也嘗試'Auth :: user() - > type ==「Dev」'也不行。 – ihue

回答

0

您是否對其他中間件使用相同的邏輯?如果是這樣,那麼這個邏輯就像是一個OR語句一樣,如果'auth'失敗,或者'admin'失敗,或者'dev'失敗,那麼404就是如此。我不確定「最好」的處理方式是不是「最好」你想要什麼,但我有一個來自開源項目的例子; laravel-5-boilerplate

Route::group([ 
     'middleware' => 'access.routeNeedsRole', 
     'role'  => ['admin', 'dev'], 
     'redirect' => '/', 
     'with'  => ['flash_danger', 'You do not have access to do that.'] 
    ], function() 
    { 
    //Any routes goes in here 
    }); 
1

你有3箇中間件作用有,但你假設DEV一個失敗。粘貼其他內容2.另外,您正在使用:

$this->auth->getUser()->type 

這是幹什麼的?如果用戶是管理員,它可能會在DEV中間件上失敗(或其他方式)。

P.S:如果您需要處理角色,我會推薦Entrust Package。

相關問題