2016-08-12 11 views
1

私はlaravelプロジェクトに取り組んでおり、認証されたユーザーだけがそのページを閲覧できるようにいくつかのページへのアクセスを制限する必要があります。これを行うにはLaravel 5ミドルウェアを使用してページへのアクセスを制限します

は、ミドルウェア作成:php artisan make:middleware OnlyRegisteredUser
をして

'onlyregistereduser' => \App\Http\Middleware\OnlyRegisteredUser::class,

としてApp\Http\kernel.php内部$routemiddlewareでそれを登録し、このクラスです。

Route::get('admin/poem', ['middleware' => 'onlyregistereduser:admin', 'uses'=>'[email protected]']); 

adminが私のミドルウェアに渡されたパラメータである:

public function handle($request, Closure $next, $right=null) 
{ 
    $user = $request->user(); 

    if ($user && $user->onlyregistereduser()) { 
     return $next($request); 
    } 

    return redirect('auth/login'); 
} 

ログインしていない場合、それはここに私のルートであるauth/loginにユーザーをリダイレクトします。次のように `列挙型」列を持っている私のユーザーモデルから取得されます。create例えば、私のコントローラメソッドの一部へのアクセスを制限する

public function up() 
{ 
    Schema::create('users', function (Blueprint $table) { 
     //... 
     $table->enum('rights', ['admin', 'guest'])->nullable(); 
     // ... 
    }); 
} 

示すように、私は私のPoemsControllerにコンストラクタを追加しました:

public function __construct() 
{ 
    $this->middleware('onlyregistereduser'); 
} 

私の問題は今、これは、ログインページに私をリダイレクトするようにPoemsControllerにすべての単一のルートを引き起こしたことです。ログインしても、私は訪問予定のページには連れません。代わりに私のホームページに行く。私が望むのは、一部のコントローラメソッドだけにアクセスを制限することであり、ユーザーのログイン後に意図したページにリダイレクトすることはできません。 私の問題を理解していただければ幸いです。 ご協力いただければ幸いです。

答えて

1

コンストラクタからミドルウェアを削除するため、ルートとコストの両方にミドルウェアを追加する必要はありません。それはあなたの "。を解決するはずです。私が望むのは、一部のコントローラメソッドだけにアクセスを制限することであり、すべてではありません"ということです。パーソナルプラグインの問題については

この

public function handle($request, Closure $next, $right=null) 
{ 
    $user = $request->user(); 

    if ($user && $user->onlyregistereduser()) { 
     return $next($request); 
    } 
    $request_url = $request->path(); 
    session()->put('login_refferrer', $request_url); 
    return redirect('auth/login'); 
} 

のように、ログイン後のリダイレクトユーザーの前に、あなたのミドルウェアを変更

if(session()->has('login_refferrer')){ 
    $url = session()->pull('login_refferrer'); 
    return redirect($url); 
} 
関連する問題