2016-07-03 1 views
2

사용자의 역할이 관리자인지 확인하는 방법이 있는데, 그렇지 않은 경우 return redirect('/')->send();으로 리디렉션하는 방법이 있습니다. 사용자 역할을 확인하고 페이지를 표시하지 않고 리디렉션을 기다리지 않고 사용자를 리디렉션하려면 어떻게해야합니까?라우트 생성자 리디렉션

내 컨트롤러 :

class AdminController extends Controller 
{ 
    public function __construct() 
    { 
     if (Auth::check()) 
     { 
      $user = Auth::user(); 
      if ($user->role != 'admin') 
      { 
       return redirect('/')->send(); 
      } 
     } 
     else 
     { 
      return redirect('/')->send(); 
     } 
    } 

    /** 
    * Display a listing of the resource. 
    * 
    * @return \Illuminate\Http\Response 
    */ 
    public function index() 
    { 
     return View('admin/index'); 
    } 
} 
+5

이 미들웨어를 사용합니다. – tkausl

답변

7

자신의 Middleware을 만듭니다. 다음은 그 예입니다. 필자의 예에서는 몇 가지 사용자 그룹이 별도의 모델에 있습니다. 필요에 따라 코드를 변경해야합니다.

터미널/콘솔을 통해 미들웨어 작성 : 이제 당신을

namespace App\Http\Middleware; 

use Closure; 
use App\User; 
use App\Usergroup; 

class UserGroupMiddleware 
{ 
    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next, $group) 
    { 
     if($request->user() !== NULL){ 
      $userGroupId = $request->user()->group; 
      $userGroup = Usergroup::find($userGroupId); 

      if($userGroup->slug === $group){ 
       return $next($request); 
      } 
     } 
     // Redirect the user to the loginpage 
     return redirect('/login'); 
    } 
} 

:

php artisan make:middleware UserGroupMiddleware 

가 생성 된 미들웨어 클래스는 당신이 당신의 미들웨어에 다음 코드를 필요 app/Http/Middleware/UserGroupMiddleware.php

에서 찾을 수를 이 미들웨어를 app/Http/Kernel.php에 등록해야합니다 :

protected $routeMiddleware = [ 
    // other middlewares 

    // Custom Middleware 
    'group' => \App\Http\Middleware\UserGroupMiddleware::class 
]; 

마지막으로 당신은 당신의 경로에 미들웨어를 첨부해야합니다

Route::group(['middleware' => 'group:admin'], function(){ 
    // Routes for admins, e.g. 
    Route::get('/dashboard', '[email protected]'); 
}); 

// Or for a single route: 
Route::get('/dashboard', ['middleware' => 'group:admin'], function(){ 
    return view('adminbereich.dashboard'); 
}); 

는 기억, 당신은 여러 미들웨어를 전달할 수 :

Route::get('/some/route', ['middleware' => ['group:admin', 'auth']], '[email protected]'); 
+0

고마워 :) 작동합니다. – lock

+0

문제 없습니다. 천만에요 :) – Brotzka