2017-10-16 5 views
0

ユーザーがルートのアクセス許可を持っている場合、Entrustで確認する方法を教えてください。Entrustを使用したLaravel ACL、ルートを保護する方法、コントローラのメソッド

私は私の権限テーブルにルートフィールドを持っていると私は私が試したよりも、それぞれにprivillegesを追加している役割を持つよりも例

can_update_profile, can_delete_profile, can_see_profile

のためのアクション

の名前ユーザがコントローラメソッドにアクセスする能力を有するが失敗するかどうかをルート上でチェックするミドルウェアを実装する。

エントラストcanは、アクセスここ

用として自由の要求のすべてを解釈し、私のミドルウェア

<?php 

namespace App\Http\Middleware; 

use Closure; 
use App\Permission; 
use Illuminate\Contracts\Auth\Guard; 
use Route; 

class AuthorizeRoute 
{ 

    public function __construct(Guard $auth) 
    { 
     $this->auth = $auth; 
    } 

    /** 
    * Handle an incoming request. 
    * 
    * @param \Illuminate\Http\Request $request 
    * @param \Closure $next 
    * @return mixed 
    */ 
    public function handle($request, Closure $next) 
    { 

     $user = $this->auth->user(); 
     $permissions = Permission::all(); 

     //dd($user); 
     $uri = $request->route()->uri(); 


     foreach ($permissions as $permission) { 

      if (!$user->can($permission->name) && $permission->route === $uri) { 
       //var_dump($user->can($permission->name)); 
       abort(403); 
      } 
     } 

     return $next($request); 
    } 
} 

答えて

0

は、私はこれをテストすることはできませんが、私の推測では、あなたがこの

よう handle()を書く必要があることです
public function handle($request, Closure $next) 
{ 
    $user = $this->auth->user(); 
    $permissions = Permission::all(); 

    $uri = $request->route()->uri(); 

    foreach ($permissions as $permission) { 
     // reordered expression order to skip calling $user->can() 
     // for routes that don't match 
     if ($permission->route === $uri && $user->can($permission->name)) { 
      // allow access only if it's a match 
      return $next($request); 
     } 
    } 

    // nothing matched, abort 
    abort(403); 
} 
関連する問題