2015-12-17 68 views
3

我有以下途徑來檢查,如果用戶進行身份驗證,然後才讓他們訪問頁面授權與認證在Route.php沿:Laravel 5.1

<?php 
Route::group([ 
    'middleware' => 'auth', 
], function() { 

    Route::get('/Categories-List', 'Skills\[email protected]'); 
}); 

在我auth()->user(),有RoleID檢查用戶是Admin還是其他角色。我想檢查RoleID是否爲1,然後只讓他們訪問該頁面。

我可以在Laravel 5.1

回答

6

好了,你需要的是創造AdminMiddleware並將其添加到路由。

首先,打開你的User模型,並添加額外的方法到它:

public function isAdmin() 
{ 
    return $this->RoleID == 1; 
} 

現在在控制檯中運行:

php artisan make:middleware AdminMiddleware

打開AdminMiddleware.php和更改handle方法,所以它應該看起來像這個:

if (!\Auth::user()->isAdmin()) { 
    if ($request->ajax()) { 
     return response('Admin account required.', 401); 
    } else { 
     return redirect('/'); // set here any url you need 
    } 
} 

return $next($request); 

現在打開app/Http/Kernel.php,並添加到$routeMiddleware物業新條目:

'isAdmin' => \App\Http\Middleware\AdminMiddleware::class, 

最後修改成你的路線

'middleware' => 'auth', 

'middleware' => ['auth', 'isAdmin'], 

這裏的順序很重要,如果你更改訂單在這裏,如果用戶沒有登錄,你會得到意外的異常。

根據您的需要,您可能還希望僅在此處使用isAdmin中間件,以防此用戶未登錄時此路由要進行其他重定向而不是auth。在這種情況下,您需要合併authisAdmin中的方法並使其符合您的需求。

+0

@Helper當用戶不是管理員時,它是否發ha?如果是這樣,你有'/'url來定義任何中間件嗎?您應該在'AdminMiddleware'中重定向到您不使用'isAdmin'中間件的路由 –

+0

如果用戶登錄但不是admin,並且命中由'isAdmin'保護的路由,它將被重定向到'/',之後它們將被重定向再次到'/' - 這就是爲什麼你得到這個。你應該在'AdminMiddleware'中使用新的路由,例如'restricted',並創建新的路由'restricted',在那裏你顯示這個頁面只限於Admin,或者你應該使用重定向到主要url登錄用戶 –

+0

http:// stackoverflow。 COM /問題/ 34560621 /調用到未定義-方法照亮-支撐外牆-validatorresolver – Pankaj

2

你想要做的是運行多箇中間件什麼設置與授權認證一起 - 一個權威性的用戶,另一個檢查他的訪問級別。

你想要做的是陣列中定義中間件,像這樣:

<?php 
Route::group([ 
    'middleware' => ['auth','isAdmin'], 
], function() { 

    Route::get('/Categories-List', 'Skills\[email protected]'); 
}); 

你可以看到我添加了一個isAdmin中間件,將做到這一點,你需要檢查。你只需要自己創建中間件。

大量的中間件的其他信息在這裏航線:http://laravel.com/docs/master/middleware#assigning-middleware-to-routes