2016-10-23 18 views
1

私はこのパスを持っている:動的ルートを作成するにはどうすればよいですか?

http://localhost:8000/home 

正規のユーザーが上記のパスを開いたとき、私は、欲しい、私はこのコントローラを呼び出す:

​​

しかし、管理者がそのパスを開いたとき、私はこのコントローラを呼び出します:あなたが見るように、私はちょっと「ダイナミックルート」ため

[email protected] 

探しています。..可能という実装していますか?言い換えれば、管理者と正規のメンバーの2つの異なるコントローラを呼び出すことはできますか?

+0

はい、可能です。ミドルウェアグループを作成できます。あなたはLaravelの認証を使用していますか? AdminMiddlewareのようなものを既に作成しましたか? –

+0

@JanWillem私は、現在のユーザーが以下のように管理者か正会員であることを理解しています: '@if(Auth :: user() - > admin){//管理者} else {//正会員}' – stack

答えて

1

Middlewareを使用して、ルートとコントローラを整理して分類できます。この中

- 比較的単純な - 場合、あなたはまた、(あなたのルートファイルで)このようなものを使用することができます

if(!is_null(Auth::user())) { 
    // first check if user is logged in, else Auth::user() will return null 
    $uses = '[email protected]'; 
    if(Auth::user()->admin) { 
    $uses = '[email protected]'; 
    } 
    Route::get('/', $uses); 
} 

更新

それとも、中のステートメント場合は、この内部のすべてを包むことができこのような認証ミドルウェアグループ、:

Route::group(['middleware' => ['auth']], function(){ 
    $uses = '[email protected]'; 
    if(Auth::user()->admin) { 
    $uses = '[email protected]'; 
    } 
    Route::get('/', $uses); 
}); 

はまた、ユーザーの表は「adminという名前の列を持っていることを確認してください'

+0

あなたのコードはこのエラーをスローします: 'Route.php行のErrorException 18: 非オブジェクトのプロパティを取得しようとしました。 ' – stack

+0

私の更新された答えを試してください。 –

+0

すばらしい答え! :) –

2

これは、Middlewaresを使用してHTTP要求をフィルタする場合に適しています。

あなたはまた同じように、あなたのルートファイルで条件付きの何かができる:あなたのアプリケーションがどのように見えるかに応じて、

if (Auth::user()->isAdmin()){ 
    Route::get('/', '[email protected]'); 
} 
else { 
    Route::get('/', '[email protected]'); 
} 

、あなたのUserモデルでisAdmin()を定義することができます。これは非常に単純な例で、role_idという列があり、id nr 1はadminです。認証されたユーザが管理者であれば、それはそうでない場合はfalse、真表示されます。

public function isAdmin() 
    { 
     return Auth::user()->role_id == 1; 
    } 

よりダイナミックかつ先進的なアプローチは、ロールテーブルを作成し、ROLE_USERピボットテーブルを持つユーザーと役割を関連付けることであろう。

さらにステップを進めたい場合は、パーミッションテーブルを作成し、permission_roleピボットテーブルを使用してロールにパーミッションを関連付けることができます。次に、アプリケーションで、アクションを実行できるように権限が必要であることを定義し、特定のユーザー役割がそのピボット・テーブルに持つすべての権限を追加できます。次に、特定の役割を持つユーザーに特定の権限があるかどうかを確認します。

+0

このエラーは、 – stack

+0

isAdminは、この場合のサンプルです。isAdmin()が何であるかを定義する必要があります。定義方法は、アプリケーションの設計方法によって異なります。 usersテーブルに "role_id"がある場合は、対応するrole_idが管理者のものかどうかを調べるisAdmin()というメソッドを作成できます。したがって、isAdmin()を呼び出すと、ユーザーに正しいrole_idがあるかどうかを確認します。答えを例で更新します。 –

+0

答えが更新されました: –

関連する問題