2016-04-03 11 views
1

adminパネルとuserview(製品の保存)を持つeCommeraceアプリケーションを作成しました。管理者パネルにアクセスして他のユーザーが特定のURLや製品の詳細のみにアクセスできるようにします私はphp artisan make:auth経由で自分のアプリケーションに認証をインストールしていますが、うまくいきましたが、今は管理パネルをADMINにのみ表示するフィルターを適用し、ストアは他のユーザーに表示されます。Laravel 5.2の管理パネルを保護する方法

私のデータベースには、一般ユーザーのためにデフォルトで値0を保持し、管理者は1を保持するブール型フィールドが宣言されています。

移行:

Schema::create('users', function (Blueprint $table) { 
      $table->increments('id'); 
      $table->string('name'); 
      $table->string('email')->unique(); 
      $table->string('password', 60); 
      $table->boolean('admin')->default(0); 
      $table->rememberToken(); 
      $table->timestamps(); 
}); 

AuthController:

<?php 

namespace App\Http\Controllers\Auth; 

use App\User; 
use Validator; 
use App\Http\Controllers\Controller; 
use Illuminate\Foundation\Auth\ThrottlesLogins; 
use Illuminate\Foundation\Auth\AuthenticatesAndRegistersUsers; 

class AuthController extends Controller 
{ 
    /* 
    |-------------------------------------------------------------------------- 
    | Registration & Login Controller 
    |-------------------------------------------------------------------------- 
    | 
    | This controller handles the registration of new users, as well as the 
    | authentication of existing users. By default, this controller uses 
    | a simple trait to add these behaviors. Why don't you explore it? 
    | 
    */ 

    use AuthenticatesAndRegistersUsers, ThrottlesLogins; 

    /** 
    * Where to redirect users after login/registration. 
    * 
    * @var string 
    */ 
    protected $redirectTo = '/home'; 

    /** 
    * Create a new authentication controller instance. 
    * 
    * @return void 
    */ 
    public function __construct() 
    { 
     $this->middleware('guest', ['except' => 'logout']); 
    } 

    /** 
    * Get a validator for an incoming registration request. 
    * 
    * @param array $data 
    * @return \Illuminate\Contracts\Validation\Validator 
    */ 
    protected function validator(array $data) 
    { 
     return Validator::make($data, [ 
      'name' => 'required|max:255', /** 
    * Create a new user instance after a valid registration. 
    * 
    * @param array $data 
    * @return User 
    */ 
    protected function create(array $data) 
    { 
     return User::create([ 
      'name' => $data['name'], 
      'email' => $data['email'], 
      'password' => bcrypt($data['password']), 
     ]); 
    } 
} 

      'email' => 'required|email|max:255|unique:users', 
      'password' => 'required|confirmed|min:6', 
     ]); 
    } 
+1

ミドルウェアについて勉強しましたか?ミドルウェアを使用することで解決できます。 –

+0

ああ、ありがとう! –

答えて

1

@AnowarCstが言ったように。ミドルウェアを使用します。プロジェクトのルートで

php artisan make:middleware Admin 

が新しいファイルApp/Http/Middleware/Admin.phpを開きます。オープンApp/Http/Kernel.php

if (Auth::check() && Auth::user()->isAdmin()) 
    { 
     return $next($request); 
    } 

    return redirect('/'); 

および$routeMiddleware配列に以下を加える:handle()方法において

追加

'admin' => \App\Http\Middleware\Admin::class, 

オープンユーザモデル:App/User.php

/** 
* Check if user is admin. 
* 
* @return bool 
*/ 
public function isAdmin() 
{ 
    return $this->admin; 
} 
を追加

今、あなたのようにroutes.phpファイルでミドルウェアを使用することができます。

Route::get('/uri-that-users-will-see', ['middleware' => ['auth','admin'], 'as' => 'your-route-name', 'uses' => '[email protected]']); 

これは、私が何かをスキップしたり、エラーがありますので、もし報告してください頭からほとんどでした。