2017-05-10 6 views
0

저는 Laravel의 미들웨어에 대해 몇 가지 문제를 겪고 있습니다.여러 역할을 가진 Laravel 미들웨어

  1. 학생 (기본값) : 인덱스 '액세스 할 수있는 사이트

    등록 된 사용자는 네 가지 역할 중 하나가됩니다 : 내가 당신에게 내가 달성하기 위해 노력하고있어 기본적인 생각을 말씀 드리죠 '와' : ','갱신 '

  2. 편집기를 개요을'보기
  3. 승인자 이전에 액세스, 플러스 할 수 있습니다 ': CA를 N 이전에 액세스, 플러스 '을 만들 ', '편집'와 '저장'
  4. 관리자가 : 모든

에 액세스 할 수 있습니다 참고 : '개요'인덱스 뷰의 일종이다, 승인자 역할 이상에만 해당

여러분이 제안하는 것이 최선의 방법이라고 생각하십니까? 이것은 내가 지금까지 한 일이지만, 작동하지 않습니다


Kernel.php

protected $middlewareGroups = [ 
... 
    'approver+' => [ 
     \App\Http\Middleware\Approver::class, 
     \App\Http\Middleware\Editor::class, 
     \App\Http\Middleware\Admin::class, 
    ], 
]; 

protected $routeMiddleware = [ 
... 
    'student' => \App\Http\Middleware\Student::class, 
    'approver' => \App\Http\Middleware\Approver::class, 
    'editor' => \App\Http\Middleware\Editor::class, 
    'admin' => \App\Http\Middleware\Admin::class, 
]; 

의 HTTP를

public function handle($request, Closure $next) 
{ 
    if (Auth::check()) 
    { 

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

    return redirect('login'); 
} 
미들웨어 \ Admin.php \

'User'Eloquent 모델 :

public function isAdmin() 
{ 
    if($this->role_id === 4) 
    { 
     return true; 
    } 
    else 
    { 
     return false; 
    } 
} 

나는 Approver 및 Editor 미들웨어 파일에서 똑같이 수행했으며 사용자 모델의 isApprover 및 isEditor 함수에서는 if 문에서 검사 된 값을 2와 3으로 각각 편집했습니다.

Route::get('scholen', '[email protected]'); 
Route::get('admin/scholen/overzicht', '[email protected]')->middleware('approver+'); 
Route::get('admin/scholen/maken', '[email protected]')->middleware('approver+'); 
Route::post('scholen', '[email protected]')->middleware('approver+'); 
Route::get('scholen/{id}', '[email protected]'); 
Route::get('admin/scholen/{id}/bewerken', '[email protected]')->middleware('admin'); 
Route::patch('admin/scholen/{id}', '[email protected]')->middleware('admin'); 
Route::delete('admin/scholen/{id}', '[email protected]')->middleware('admin'); 

아직 정확히 점에 모두가 아니라 내가 승인자을 가진 사용자로 로그인 할 때부터 붙어있어 :

마지막으로

, 여기 내 경로에 \ 웹 파일을 한 일입니다 권리에 관한 정보를 제공하고 학교 개요에 액세스하려고하면 다시 홈 페이지로 리디렉션됩니다.

일반적으로 나는 너무 혼란스럽고 전혀 옳지 않은 것처럼 느껴진다. 좀 더 효율적으로 할 수있는 조언을 누군가가 줄 수 있을까?

미리 감사드립니다.

답변

4

각 역할마다 별도의 미들웨어가 없어야합니다. 매우 지저분해질 것입니다. 전달 된 모든 역할을 검사 할 수있는 단일 역할 검사 미들웨어를 갖는 것이 좋습니다.

Http \ Kernel.웹 루트

Route::get('admin/scholen/overzicht', '[email protected]')->middleware('role:editor,approver'); 
Route::get('admin/scholen/{id}/bewerken', '[email protected]')->middleware('role:admin'); 
+0

에서 마지막으로 미들웨어 \ Role.php

public function handle($request, Closure $next, ... $roles) { if (!Auth::check()) // I included this check because you have it, but it really should be part of your 'auth' middleware, most likely added as part of a route group. return redirect('login'); $user = Auth::user(); if($user->isAdmin()) return $next($request); foreach($roles as $role) { // Check if user has the role This check will depend on how your roles are set up if($user->hasRole($role)) return $next($request); } return redirect('login'); } 

\

protected $routeMiddleware = [ ... 'role' => \App\Http\Middleware\Role::class, ]; 

PHP로 HTTP

내가 많이 나는 그것을 만들고 있었다 잘 작동하는 것 같다 그 :) 너무 복잡 생각 대단히 감사합니다! – Jesse