2016-04-25 10 views
1

Laravelを初めて使用し、バージョン5.0を使用しています。Laravel 5.0、管理者およびフロントエンドのユーザー

私のウェブサイトにはフロントエンドのユーザーがおり、明らかにウェブサイトには管理者がいます。

問題管理者以外のユーザーも管理パネルにログインすることができます。

フロントエンドユーザーが管理者を入力できないようにするにはどうすればよいですか?

私は正しい方法で何かをしているかどうか、またそうでない場合は正しい方法を見てください。

マイroutes.phpのがにHomeControllerの関連部分を

public function showLogin(){ 
    // show the form 
    return View('home.login'); 

} 

public function doLogin(){ 

    // validate the info, create rules for the inputs 
    $rules = array(
     'email' => 'required|email', // make sure the email is an actual email 
     'password' => 'required|alphaNum|min:3' // password can only be alphanumeric and has to be greater than 3 characters 
    ); 

    // run the validation rules on the inputs from the form 
    $validator = Validator::make(Input::all(), $rules); 

    // if the validator fails, redirect back to the form 
    if ($validator->fails()) { 
     return Redirect::to('login') 
      ->withErrors($validator) // send back all errors to the login form 
      ->withInput(Input::except('password')); // send back the input (not the password) so that we can repopulate the form 
    } else { 

     // create our user data for the authentication 
     $userdata = array(
      'email'  => Input::get('email'), 
      'password' => Input::get('password'), 
      'active' => '1', 
      'role'  => 'user' 
     ); 

     // attempt to do the login 

     if (Auth::attempt($userdata)) { 
      // validation successful! 
      // redirect them to the secure section or whatever 
      // return Redirect::to('secure'); 
      // for now we'll just echo success (even though echoing in a controller is bad) 

      return Redirect::to('home'); 

     } else {   

      // validation not successful, send back to form 
      return Redirect::to('login'); 

     } 

    } 
}//doLogin 

以下の通りである。これは、私が管理者とフロント用に別のフォームを持っていることを意味し

Route::get('home', '[email protected]'); 
Route::get('consign', '[email protected]'); 
Route::post('processConsignment', '[email protected]'); 

Route::get('login', array('uses' => '[email protected]')); 
Route::post('login', array('uses' => '[email protected]')); 
Route::get('logout', array('uses' => '[email protected]')); 

Route::controllers([ 
    'auth' => 'Auth\AuthController', 
    'password' => 'Auth\PasswordController', 
]); 

// Admin area 
get('admin', function() { 
    return redirect('/admin/dashboard'); 
}); 

$router->group([ 
    'namespace' => 'Admin', 
    'middleware' => 'auth', 
], function() { 
    resource('admin/dashboard', 'DashboardController'); 
    resource('admin/auction', 'AuctionController'); 
    resource('admin/auctionlot', 'AuctionLotController'); 
    resource('admin/video', 'VideoController'); 
}); 

// Logging in and out 
get('/auth/login', 'Auth\[email protected]'); 
post('/auth/login', 'Auth\[email protected]'); 
get('/auth/logout', 'Auth\[email protected]'); 

以下に示します。エンドユーザー

マイUSERSテーブル構造が助けてください

CREATE TABLE IF NOT EXISTS `users` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `email` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `password` varchar(255) COLLATE utf8_unicode_ci NOT NULL, 
    `role` enum('admin','user') COLLATE utf8_unicode_ci NOT NULL DEFAULT 'user', 
    `active` enum('1','0') COLLATE utf8_unicode_ci NOT NULL, 
    `remember_token` varchar(100) COLLATE utf8_unicode_ci DEFAULT NULL, 
    `created_at` timestamp NULL DEFAULT NULL, 
    `updated_at` timestamp NULL DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    UNIQUE KEY `users_email_unique` (`email`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=4 ; 

以下の通りです。

おかげで、 コッド

+0

あなたの認証ミドルウェアは何をしますか?あなたは、ユーザーが管理者のログインフォームを使用して管理者のアクセス権を取得できること、またはユーザーが「ユーザー」としてログインして「管理者」セクションにアクセスできることを伝えていますか? – dishrex

+0

彼らは「ユーザー」としてログインすることができ、引き続き「管理者」にアクセスできます... URLを管理するだけでなく、直接管理者にログインすることもできます...双方向を意味します – rgoyal

+0

検証するための新しいミドルウェアを作成しますユーザーを管理者にします。 – aethergy

答えて

0

私は自分のアプリケーションで行うことは、彼らは私がsessionにいくつかの関連情報を書き込み、その後、任意の関連するURLのミドルウェアチェックを作成し、チェックする検証されていたら、ログイン処理中ですミドルウェアのsession

あなたの場合は、セッション変数にロールを書き込んでミドルウェアでチェックしたいと思うでしょう。例えば

:にHomeController

でセッションに役割を置く

Route::group(['middleware' => 'auth'], function() 
{ 
    resource('admin/dashboard', 'DashboardController'); 
    resource('admin/auction', 'AuctionController'); 
    resource('admin/auctionlot', 'AuctionLotController'); 
    resource('admin/video', 'VideoController'); 
}); 

:私はルートグループで保護するすべてのエンドポイントを置く

routes.phpの

$sess_array = [ 'user_role' => $user_role, // From what you got from DB 'user_email' => $user->sup_email, 'active' => '1', ]; $request->session()->put($sess_array); 

認証ミドルウェア

public function handle(Request $request, Closure $next) 
{ 

      if($request->session()->get('user_role') ! == 'admin') { 
       return $next($request); 
      } else { 
       return redirect('login'); 
      } 

} 

それは少し単純化しすぎな例ですが、私はあなたの要点を得る願っていますか?

2

これは、ミドルウェアを使用することによってかなり容易に解決することができます(http://laravel.com/docs/5.0/middleware) 最初にミドルウェアを作成することができます、あなたは何でも、のはAdminMiddleware

php artisan make:middleware AdminMiddleware 

を言わせて、それを呼び出すことができます今、私たちは私たちのミドルウェアを持っていることを、私たちは、編集する必要があります私たちが何をしたいのかを指定します。アプリで \のHttp \ミドルウェアあなたは我々だけで、ユーザーを取り、型があるかどうかを確認して、私たちはここでやっている

<?php namespace App\Http\Middleware; 

use Closure; 

class AdminMiddleware { 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 
     if ($request->user()->type != 'admin') 
     { 
      return redirect('home'); 
     } 

     return $next($request); 
    } 

} 

を作成AdminMiddlewareに

に新しく作成されたファイルが表示されますもしそうでなければ、家にリダイレクトしてください。 これで、routes.phpファイルで使用する必要があります。

ルートが役立ちます

Route::group(['middleware' => 'App\Http\Middleware\AdminMiddleware'], function() 
{ 
    Route::get('/admin', function() 
    { 
     // can only access this if type == admin 
    }); 

}); 

うまくいけば、ファイル!

回答がコピーされますHERE

関連する問題