2017-07-15 10 views
0

AdminMiddlewareを使用して管理パネルのユーザーのアクセス許可を設定するシンプルなシステムを作成しました。 すべてのユーザはグループ、ポスト、ページ....Laravrl5-全モジュールコントローラのユーザーアクセス権

ルート/ウェブのような権限があります。だから私はそのすべてのユーザー権限の一覧を取得AdminMiddleware

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

     if ($request->user()->user_type !== 'man') 
     { 
      return redirect('/'); 
     } 
     $user_permissions = Auth::user()->permissions; 
     foreach($user_permissions as $value){ 
      $controller = Controllers::get_controller($value->controller_id); 
      $permissions['name'] = $controller->controller_name; 

      $all_permissions[] = $permissions; 
      unset($permissions); 
     } 
     foreach ($all_permissions as $value){ 
      $controllers[] = trim($value['name']); 
     } 
     $request->user()->controllers = $controllers; 

     return $next($request); 

    } 
    else{ 
     return redirect('/login'); 
    } 
} 

Route::group(['middleware' => 'admin'], function() 
{ 
    Route::get('/admin' , 'admin\[email protected]')->name('admin'); 
    //all admin panel routes 
} 

をコントローラの名前を表し、すべてのコントローラを表します(このコントローラでは、ユーザがデータを見るためにユーザコントローラにアクセスするための 'users'というアクセス権を持っているかどうかをチェックします)。

protected $user; 

public function __construct(){ 
    $this->middleware(function ($request, $next) { 
     $this->user= Auth::user(); 
     if(!in_array('users',$this->user->controllers)){ 
      session()->flash('error' , 'No permission'); 
      return redirect('/admin'); 
     } 
     else{ 
      return $next($request); 
     } 
    }); 
} 

これはすべてのコントローラに使用されており、小さなプロジェクトでも機能しますが、モジュール(nWidart/laravel-modules)の大きなプロジェクトの場合は難しくなります。私が望むのは、モジュール全体のパーミッションをチェックすることです。だから、もし私がblogという名前のモジュールを持っていたら、ログインしたユーザがそのモジュールのコントローラにアクセスする権限を持っているかどうかを確認したいのですが、どうすればこのことができますか?

+1

ルートでごモジュールのルートを追加し、このグループにアクセスする権限かどうかを確認そのルートグループのミドルウェアを追加します。それはララベルが独自のルートで行うことです。 – apokryfos

答えて

0

私はすべてのモジュールのためのミドルウェアを作成し、ミドルウェアに私は、ユーザーのアクセス権を取得し、彼

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

     if ($request->user()->user_type !== 'man') 
     { 
      return redirect('/'); 
     } 
     $user_permissions = Auth::user()->permissions; 
     $user_group = Auth::user()->group_id; 

     if($user_group == 1){ //all permissions admin 
      return $next($request); 
     } 
     else{ 
      //get user permissions as an array 

      if(in_array('groups',$user_permissions)){ //module name is groups 
       return $next($request); 
      } 

      else{ 
       return redirect('/home'); 
      } 
     } 


    } 
    else{ 
     return redirect('/login'); 
    } 
} 

ルート

Route::group(['middleware' => 'admin'], function() 
{ 
    Route::get('/admin' , 'admin\[email protected]')->name('admin'); 
}); 

Route::group(['middleware' => 'users'], function() 
{ 
    Route::get('/adminUsers' , '\Modules\Users\Http\Controllers\[email protected]'); 
}); 

Route::group(['middleware' => 'groups'], function() 
{ 
    Route::get('/groups' , '\Modules\Groups\Http\Controllers\[email protected]'); 
}); 
関連する問題