2015-11-06 3 views
8

私は、globaladmin、エディタなどの複数のユーザーロールを持つコントロールパネルアプリケーションで作業しています。これらのロールを単一のUserControllerリソースで使用します。単一のリソースコントローラでEntrustの役割を使用する際の提案が必要です。-Laravel5

たとえば、グローバル管理者はすべてのRestfulメソッドを実行できる必要がありますが、エディタはユーザーの表示と更新のみ可能です。

私が知っているのは、ミドルウェアが箱から出ていることがわかります。これは、必要なものに最適です。しかし、それはルートでのみ動作します(この場合、各役割ごとに別々のコントローラが必要です)

私のUserControllerは次のようになります。

Class UserController extends BaseController 
{ 
    $protected $viewfolder; 
    public function __construct 
    { 
     // Checking for role and then assigning the folder name of the views 
     $role = User::getRole(); 
     switch($role) 
     case 'globaladmin': 
       $this->viewfolder = 'globaladmin'; 
       break; 
     case 'editor': 
       $this->viewfolder = 'editor'; 
       break; 
     default: 
       abort(401, 'Access Denied'); 
       break; 
    } 

    public function index(){ 
     if(Entrust::can('view-all-users')){ 
      $users = User:all(); 
     } 
     return view($this->viewfolder.'.users.viewuser', compact('users')); 
    } 
    public function create() 
    public function update() 
    public function delete() 
} 

私は、ユーザーロールをチェックして、唯一の役割は、それを使用する権限を持っている場合にのみ、この方法を使用することができるようになるコンストラクタでミドルウェアを必要としています。しかし、これは他のコントローラでも同様に使用されるので、ハッキングのないまともな方法で行うべきです。

答えて

4

私はあなたのルートに次のファイルを使用していることを前提としています。この場合

Route::resource('users', 'UserController'); 

を、私はあなたがベースとしてエントラストが提供するミドルウェアのいずれかを使用することを、お勧めと呼ばれる方法を取得します、例えばあなたがEntrustRoleを使用している場合:私は、これがで動作すると思います。..

public function handle($request, Closure $next) 
{ 
    $controllerMethod = Route::segment(3); 
    $roles = $this->retrieveRequiredRolesForMethod($method); 
    if ($this->auth->guest() || !$request->user()->hasRole(explode('|', $roles))) { 
     abort(403); 
    } 
    return $next($request); 
} 

はもちろん、これは単なるヒントであり、あなたが呼び出されるメソッドを抽出するためのより良い方法を見つける必要がありますし、まだretrieveRequiredRolesForMethod

+0

ありがとうございました。私は、アプリケーションの複雑さのために、それぞれの役割ごとに個別のコントローラを持っている別のルートを下ってきましたが。しかし、私は本当にこのアイデアが好きです。誰かが新たな視点を思い付くかどうかを待ってみましょう。 –

0

ああを実装する必要がありますあなたの場合。ここで

class UserController extends Controller 
{ 
    public function __construct() 
    {       
     $this->middleware('permission:user_index', ['only' => ['index']]); 
     $this->middleware('permission:user_create', ['only' => ['create', 'store']]); 
     $this->middleware('permission:user_edit', ['only' => ['edit', 'update']]); 
     $this->middleware('permission:user_delete', ['only' => ['delete']]); 
     $this->middleware('permission:user_view', ['only' => ['show']]);    

    } 
} 

user_editなどUSER_INDEX、user_create、ユーザモジュールの権限(パーミッションテーブル名フィールドのエントリ)です。

これは自動的にログインしているユーザーの能力をチェックし、それに応じてページを表示します。

関連する問題