2016-08-24 5 views
0

ユーザーが特定のページを表示するために必要なアクセス許可を持っているかどうかを確認するためにミドルウェアを作成しようとしています。私は現在ミドルウェアを呼び出すために使用するコードの下に。ユーザーが必要とする役割の名前を渡しますが、ストアメソッドが呼び出されるときに使用される必須のIDも渡したいと考えています。

これを行う方法はありますか、このコントローラーで別の機能を実行するか、ルートチェックミドルウェアをroutes.phpに移動する必要がありますか?私はそれが私のリソースコントローラによって既に定義されているすべてのルートをredifineする必要があるので、私はそれを移動しないことを好む。

public function __construct() 
{ 
    $this->middleware('permission:Manager',['only' => [ 
     'show', 
    ]]); 
} 

public function show($id) 
{ 
    // 
} 

答えて

2

あなたは例えば、要求されたページのIDと、要求を実行するユーザーを得るために、あなたのミドルウェアのhandle方法で$requestオブジェクトにアクセスすることができます

public function handle($request, Closure $next, $role) 
{ 
    if ($request->user() && $request->has('id')) 
    { 
     if ($request->user()->hasRole($request->id, $role) 
      return $next($request); 
    }   
    return redirect('/403'); // redirect when not allowed 
} 

hasRole方法に注意してください$roleパラメータは、独自のメソッドとパラメータの単なるプレースホルダ名です。

+0

ありがとうございました。これを見つけるかもしれない他の人たちのために: 'id'は認識されませんが、あなたは "$ request-> route() - > parameters()"でこれらを見つけることができます。 idを名前に置き換えてください(私の場合はリソースの名前です)。 – Stefan

関連する問題