2017-11-28 12 views
0

私はZizaco/entrustパッケージを使用している役割/権限ベースのlaravelアプリケーションを作成します。laravelのルートパスに基づいた動的なアクセス許可を経由して

今はweb.phpに異なるミドルウェアとしてルートに定義されたパーマを割り当てる必要がないことアプローチを使用すると、つまり:

最初に定義されたすべてのルート(Route::getRoutes()->getRoutes()経由)をフェッチし、permissionsテーブルでそれらのそれぞれを格納します。

私たちは、このコードによって、すべてのルートを取得することができます:

$routes = collect(Route::getRoutes()->getRoutes())->reduce(function ($carry = [], $route) { 

      $carry[] = $route->uri(); 
      return $carry; 
     }); 

一方、我々は、これらの権限を持つロールを定義することができますし、通常の方法でユーザにそれらを添付。

ユーザーがページにアクセスするには、最初にルートパス名を取得してから、canメソッドで定義されていますが、ユーザーはそのルートにアクセスできるかどうかを確認します。これは、たとえばルートグループとしてすべてのルートに追加されたcheckAccessという単純なミドルウェアを介して行うことができます。

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

      $currentName = Route::getCurrentRoute()->getPath(); 
      if (Auth::user()->can($currentName)) { 
       return $next($request); 
      }else{ 
       return response()->view('errors.403', ['prevPage'=> URL::previous()]); 
      }*/ 

      return $next($request); 
     } 
     return Redirect::to('/admin/login'); 
    } 
} 

Route::middleware(['checkAccess'])->group(function() { 
    //Other routes 
}); 

ただし、一部のリソースルートには同じルートパスがあり、メソッドアクセスが異なります。 like:

+-----------+-----------------+---------+----------------+ 
| METHOD |  URL  | Action | Route Name | 
+-----------+-----------------+---------+----------------+ 
| GET  | /photos/{photo} | show | photos.show | 
| PUT/PATCH | /photos/{photo} | update | photos.update | 
| DELETE | /photos/{photo} | destroy | photos.destroy | 
+-----------+-----------------+---------+----------------+ 

これは重複するアクセス許可の原因です。実際には動作が異なりますが、

私は、動的に権限を作成するための相対的な方法があることを知りたいと思います。この場合、この問題を解決するために何ができますか?

答えて

0

私はそれがあなたが必要とするものであるかどうかはわかりませんが、おそらくそれはあなたを助けるでしょう。私はモジュール式のアプリケーション構造を持っていて、各モジュールにはroute.phpファイルが1つあります。そのファイルで私のルートは許可に依存します:

Route::get('/edit/{param?}', [ 
      'as' => 'get.users.edit', 
      'uses' => '[email protected]', 
      'middleware' => ['permission:admin'] 
     ]); 
関連する問題