2017-02-14 42 views
0

我在laravel路由組其中有auth如何添加自定義的中間件路由組中的laravel

Route::group(['middleware'=>'auth', function() 
{ 
    //Routes 
}); 

中間件現在這些航線僅適用於已登錄的用戶。我遇到登錄用戶擁有權限的情況。我有一些路由只能由登錄用戶訪問,如果他們有特權OWNER

在函數中,我已經啓動了一個會話並存儲了特權值。

我做了這樣的事情

Route::group(['middleware'=>'auth', function() 
{ 
    //Routes 
    if(session::get('privilege') 
    { 
     //Routes 
    } 
}); 

這不是工作也不是合適的方法。任何人都可以告訴我如何在中間件內添加中間件?

+1

您可以爲此創建自己的中間件,並將其用於身份驗證。 – Kumar

回答

1

您將需要創建一個名爲OWNER

php artisan make:middleware Owner 

將創建一箇中間件文件爲你定製的中間件。 然後在public function稱爲handle u能所以在最後這樣做

if (Auth::user()->privilege == "OWNER") { 
     return $next($request); 
    } 

return redirect('home'); 

您的自定義的中間件將是這個樣子:

<?php 

namespace App\Http\Middleware; 

use Closure; 

class Owner 
{ 
/** 
* Handle an incoming request. 
* 
* @param \Illuminate\Http\Request $request 
* @param \Closure $next 
* @return mixed 
*/ 
public function handle($request, Closure $next) 
{ 
    if (Auth::user()->privilege == "OWNER") { 
     return $next($request); 
    } 

    return redirect('home'); 

} 

}

More about Laravel Middelware here

+0

並使用它像'Route :: get() - >中間件('Owner');'對嗎? – Alen

+0

Jup多數民衆贊成在! –

1

有應該在你的路由文件中沒有邏輯 - 這些應該簡單地定義路由a別無他法。你應該做的就是定義中間件從而驗證特權/角色的用戶,你可以指定被傳遞到中間件這樣的參數:

Route::group(['middleware' => 'auth', function() { 

    Route::get('/my-route', '[email protected]')->middleware('role:some_role'); 

    Route::get('/my-other-route', '[email protected]')->middleware('role:some_other_role'); 

}); 
在中間件

然後,你可以通過第三個參數訪問參數在handle方法中。隨着該值,你可以驗證的特權/角色的用戶,然後再決定用戶是否應訪問路線:

public function handle($request, Closure $next, $role) 
{ 
    // Do something with $role 

    return $next($request); 
} 

如果你不確定如何定義自己的自定義中間件,看看這裏的文檔: https://laravel.com/docs/middleware

相關問題