2017-05-18 17 views
0

ミドルウェアにパラメータを渡すロールミドルウェアがあります。役割ミドルウェア動的パラメータLaravel 5.4

public function __construct(UserInterface $user, RoleInterface $role, MaritalStatusInterface $maritalStatus, CityInterface $city){ 

     $this->middleware('auth'); 
     //$this->middleware('role:System Admin'); I changed it to 6 for the id. 
     $this->middleware('role:6'); 

    } 

私RoleMiddlewareは、あなたはそれが非常に6に結び付けられているIを見ることができるように、この

public function handle($request, Closure $next, ...$params) 
    { 


     $roles = $request->user()->roles()->get(); 

     $roles = $roles->map(function($item){ 

      return $item->id; 
     }); 

     foreach ($params as $value) { 

      if(! in_array($value, $roles->toArray())){ 

       return redirect()->action('[email protected]'); 
      } 
     } 


     return $next($request); 
    } 

です。 7を追加したい場合はどうすればいいですか...動的にしたいのですが。私のテーブルはUsers​​とRolesです。どのテーブルが必要か、それを実行する方法。

+0

を爆発すべき行う必要があります'$ this-> middleware( 'role:6');'このスクリプトはどこにありますか?コントローラーで? – Demonyowh

+0

コントローラを更新しました。スクリプトはAdminControllerにあります。ありがとう – Rbex

答えて

1

あなたは動的にあなたが許可されたロール用のデータベースを持っている必要があり、それを望んでいるので...その後、同じコントローラであなたは

$allowedRoles = AllowedRoles::all(); 
$loop=1; 
foreach($allowedRoles as $role) 
{ 
    $roleString = $loop == 1 ? $role->value : $roleString.'|'.$role->value; 
    // where value is equivalent to the role of your role id in role database 
    $loop++; 
} 
$this->middleware('role:'.$roleString); 

は、あなたのミドルウェアでは、あなたがroleString

public function handle($request, Closure $next, $roles) 
{ 
    $roles = explode('|',$roles); 
    $user = User::find($request->user()->id); 
    foreach($user->intRoles as $myRole) 
    { 
     if(in_array($myRole->role_id, $roles)) 
     { 
      return $next($request); 
     } 
    } 

    // Redirect 
    return redirect()->back(); 
} 
+0

ありがとう私はこれを試し、あなたの答えを後で受け入れます。 – Rbex

関連する問題