2016-09-06 17 views
1

Laravel 5.3でアプリをビルドすると、管理者は管理者がユーザーとしてアプリにログインできるようになり、その特定のものを確認することができますユーザは、自分の管理セッションを維持しながら、ユーザリストに戻ることができ、再認証することなく別のユーザとしてログインすることができる。管理者がLaravel 5.3のユーザーとしてログインする機能

現在、基本的なLaravel Authを実装しています。つまり、別の認証セッションを開始すると管理セッションが終了し、再ログインする必要があります。

私はLaravel Multi Authをチェックしましたが、2つのテーブル(ユーザー、管理者)で動作するようです。私の場合は1つのユーザーテーブルを使用し、ACLを使用して役割を管理し、管理者とユーザーを決定します。

あなたはこのソリューションに対してどのようなプログラミングロジックのアイデアを持っていますか?これがLaravel 5.xでどのように実装できるのか他の意見やアイデアを見つけようとしています

+0

あなたのニーズを満たすソリューションは見つかりましたか? –

+0

@MunnaKhanはい、しかし、私は私の頭の上にパッケージが呼ばれていることを覚えていない、私は企業を切り替えているので、私はもうそのプロジェクトにアクセスすることはできません。しかしそこにはいくつかのパッケージがあり、そのうちの1つは偽装です。 – nullwriter

答えて

0

私はセッションでこれを行います。私はLaravelを使用していませんが、私は頻繁にPHPを使用していますので、私の答えはPHPになります。
ヘッダページで は、あなたが最も可能性の高いユーザーがログインしているかどうかを確認するには、セッションチェックのいくつかの種類があります。例:

<? php 
session_start(); 
if (isset($_SESSION['fakeuser'])){ 
//do stuff with the user session 
//change logout button to destroy this session instead of logging the user out 
} 
elseif (isset($_SESSION['user'])){ 
//do stuff with the user session 
} else { 
die('User not logged in!'); 
} 
?> 

<? php 
session_start(); 
if (isset($_SESSION['user'])){ 
//do stuff with the user session 
} else { 
die('User not logged in!'); 
} 
?> 

私のようなものに変更しますユーザーを切り替えるには、ユーザーがログインするときにセッションの開始方法をコピーするだけです。ユーザーを切り替えるには、新しい「fakeuser」を破棄し、元のセッション+管理者権限に戻しますもう一度ログインし直してください。

これは、とにかく取る論理的なアプローチです。

1

本当に本当にログインする必要がありますか? 私は管理者としてログインしたままで、ユーザーのログインをシミュレートします。 すべてのデータベースへの管理者アクセスを許可できます。 コントローラでは、Auth::user()の代わりにUser::find($user_id)を使用して、ユーザーのデータにアクセスできます。

https://laravel.com/docs/5.3/database

https://laravel.com/docs/5.3/eloquent

+0

うーん、興味深いね。つまり、AuthオブジェクトのユーザーIDに関するいくつかの大きなクエリを使用して製品を表示すると、これは2セッション(管理者、ユーザー)とシステムが自然に動作するのに比べて、ユーザーをシミュレートするためのプログラミングの変更と条件が多く必要になりますそのセッション....私の考え、しかし私はそれを探しています。 – nullwriter

1

私は最近、プロジェクトの機能を実装しました。私はセッションとミドルウェアを使ってこれを行った。 「ImpersonateController」

  1. するコントローラを作成し、目的のためにimpersonateInimpersonateOutのための2つのルートを設定します。これは、私はそれをやった方法です。 [email protected]方法で

    Route::get('impersonateIn/{user}', '[email protected]'); 
    Route::get('impersonateOut', '[email protected]'); 
    
  2. だけでセッション変数にあなたがログインするユーザIDとURL backUrlを設定します。

    public function impersonateIn($id) 
    { 
        session(['impersonated' => $id, 'backUrl' => \URL::previous()]); 
    
        return redirect()->to('dashboard'); 
    } 
    
    public function impersonateOut() 
    { 
    
        $back_url = Request::session()->get('backUrl'); 
    
        Request::session()->forget('impersonated', 'secretUrl'); 
    
    
        return $back_url ? 
         redirect()->to($back_url) : 
         redirect()->to('dashboard'); 
    } 
    

最初の部分が実行されます。セッションごとに変数セットが impersonatedであるかどうかを確認する必要があります。それを行うための良い場所はミドルウェアです。

  1. ハンドルメソッドでセッションを確認するためのミドルウェアを作成します。 impersonatedが見つかった場合は、現在の要求に対してのみAuth::onceUsingId()を使用してユーザーとしてログを記録します。

    class ImpersonateMiddleware 
    { 
        public function handle($request, Closure $next) 
        { 
         if(Request::session()->has('impersonated')) 
         { 
          Auth::onceUsingId(Request::session()->get('impersonated')); 
          } 
    
        } 
    } 
    
  2. これで、すべてのリクエストに対してミドルウェアを適用するだけで済みます。 HTTP/Kernel.php

    protected $middlewareGroups = [ 
    
        'web' => [ 
    
         //.... 
    
         \App\Http\Middleware\ImpersonateMiddleware::class, 
        ], 
    ]; 
    
  3. からこれを行うには最高の場所は、唯一残っている事は、あなたがセッションをチェックして、impersonateOutログアウトルートを交換する必要があります。今すぐユーザーからログアウトした管理者が古いルートにリダイレクトされます。 それだけです!

関連する問題