2017-06-20 70 views
0

我正在使用laravel-permission軟件包。我創建了2個角色adminuser,並將admin角色與權限Access CMS關聯。我還創建了兩個用戶,一個是admin角色,另一個是user角色。laravel許可的Laravel角色

我已經把我所有的admin路線背後AdminMiddleware

Route::group(['prefix' => 'admin', 'middleware' => ['auth', 'isAdmin']], function() { 
    // Routes 
} 

中間件來自this tutorial

public function handle($request, Closure $next) 
{ 
    if (!Auth::user()->hasPermissionTo('Access CMS')) { 
     die('aargh'); 
    } 

    return $next($request); 
} 

這適用於與admin角色的用戶。問題是,當我與其他用戶一起登錄時,它(應該是)die,但用戶仍然登錄。如果我在此嘗試後回顯Auth::user(),它會顯示非admin用戶。我所期望的是,它可以防止用戶登錄。我錯過了什麼?

+0

爲什麼要記錄用戶身份驗證,如果他沒有該路線的權限?國際海事組織這將更邏輯重定向這個用戶到一個特定的頁面,並顯示他沒有訪問的錯誤:'返回重定向() - >路由('家') - > withErrors ['沒有訪問'] –

+0

我的觀點是當它擊中該中間件時用戶已經登錄。如果我把中間件中的'return'語句放在用戶仍然登錄的位置。 – GluePear

回答

0

可能不是最好的選擇,但你可以嘗試。

Auth::logout();

然後用戶返回家園,一旦他們已註銷。

0

您錯過了首先執行auth中間件。中間件按照它們在數組中聲明的順序執行。 routing groups

爲了實現在所有不記錄,你將不得不改變中間件的順序,但你將無法使用Auth::user()了,因爲用戶不會authed。所以要做到這一點沒有Auth::user()你必須自己查詢數據庫來查找用戶對象,然後檢查權限。不過這不推薦。爲什麼這個用戶是否被認證是很重要的?

+0

爲什麼不建議找到用戶對象,然後檢查允許?我還可以檢查許可嗎? – GluePear