2016-06-13 73 views
0

我被某些東西所困惑。對於身份驗證,我使用的是LDAP,更具體地說,這個LDAP庫本質上是在Laravels身份驗證門面的基礎上工作的。使用LDAP保護路線

一切都很好,我現在可以使用LDAP登錄和登出。但是,登錄時,我有一個更新用戶按鈕。這基本上使用LDAP來獲得用戶分開的所有組。所以我有三個表,

users 
groups 
users_groups 

當按鈕被按下時,我將所有用戶添加到users表中。然後我將所有唯一的組添加到組表中。最後一個表users_groups本質上是一個數據透視表,它將users_id鏈接到groups_id。

到此爲止,我可以看到,例如,除了3組之外,其中一組是管理員組。我也可以看到這個組的所有成員通過這樣

$group = Group::where('groupName', 'admin')->first(); 
$users = $group->user; 

現在也有一些路線我只是想提供給管理員用戶。我可以在Kernel.php看到有以下

protected $routeMiddleware = [ 
    'auth' => \App\Http\Middleware\Authenticate::class, 
    'auth.basic' => \Illuminate\Auth\Middleware\AuthenticateWithBasicAuth::class, 
    'guest' => \App\Http\Middleware\RedirectIfAuthenticated::class, 
]; 

在我只使用身份驗證,以確保在用戶登錄的時刻。很顯然,我沒有管理員一個設置着呢,我想我這樣做的方式可能會有問題,因爲我正在創建自己的組表。

我該如何去阻止訪問特定路由到只有管理員組別的用戶?

謝謝

回答

1

您可以通過創建一個新的路由中間件來做到這一點。

1)建立中間件類

php artisan make:middleware AdminMiddleware 

2)驗證邏輯添加到您AdminMiddleware類

if(Auth::user()->inGroup('GROUPNAME')) 
{ 
    return $next($request); 
} 
else 
{ 
    return view('auth.login')->withErrors('You are not logged in'); 
} 

3)新的中間件添加到您的$ routeMiddleware

'admin' => 'App\Http\Middleware\AdminMiddleware', 

4 )將中間件別名添加到您希望保護的路線

Route::get('admin', [ 
    'as' => 'admin', 
    'middleware' => 'admin', 
    'uses' => '[email protected]' 
]);