2017-10-16 19 views
0

Comment vérifier avec Entrust si l'utilisateur a l'autorisation sur l'itinéraire.ACL Laravel avec Entrust, comment protéger les routes, les méthodes de contrôleur

J'ai dans ma table d'autorisations un champ d'itinéraire et le nom de l'action

par exemple

can_update_profile, can_delete_profile, can_see_profile

que d'avoir les rôles que je ajoute à chacun des privilleges que j'ai essayé implémenter un intergiciel qui vérifie l'itinéraire si l'utilisateur a la possibilité d'accéder à la méthode du contrôleur mais échoue.

Entrust can interprète toutes les demandes que l'accès gratuit pour

ici est mon middleware

<?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); 
    } 
} 

Répondre

0

Je ne peux pas tester cela, mais je pense que vous devriez écrire handle() comme celui-ci

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); 
}