2017-06-20 24 views
0

私はlaravel-permissionパッケージを使用しています。私は2つのロールadminuserを作成し、adminロールに許可Access CMSを関連付けました。私はまた、adminロールとuserロールを持つ2人のユーザーを作成しました。laravel-permissionを持つLaravelのロール

私はAdminMiddlewareの後ろにすべての私のadminルートを入れている:

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

なぜあなたはそのルートへのアクセス許可を持っていないユーザー認証をログに記録しますか? IMOでは、このユーザを特定のページにリダイレクトし、アクセス権がないというエラーを表示します: 'return redirect() - > route( 'home') - > withErrors ['アクセスなし']' –

+0

私のポイントそのミドルウェアにヒットした時点で、ユーザーはすでにログインしています。ミドルウェアに 'return'ステートメントを置くと、ユーザーはまだログインしています。 – GluePear

答えて

0

最高の選択肢ではないかもしれませんが、試してみることもできます。

Auth::logout();

その後、彼らはログアウトされた後に自宅にユーザーを戻します。

0

まず、authミドルウェアが実行されています。ミドルウェアは、配列内で宣言されている順に実行されます。 routing groups

全くのログインではない達成するために、あなたは、ミドルウェアの順序を変更する必要がありますが、ユーザがauthedされないので、あなたはもうAuth::user()を使用することはできません。したがって、Auth::user()なしでこれを行うには、ユーザーオブジェクトを検索してアクセス許可を確認するために、データベースを自分で照会する必要があります。しかしこれはお勧めできません。ユーザーが宣伝されているかどうかはどうして重要なのですか?

+0

ユーザーオブジェクトを見つけて、許可?どうすればその許可を確認できますか? – GluePear

関連する問題