2016-06-07 12 views
1

Ich versuche derzeit, jedem Gast die Rolle 'Gast' zuzuweisen, damit sie Berechtigungen haben können. Ich habe derzeit den folgenden Code, der abgesehen von einer Middleware, scheint dies der falsche Ort zu sein, ich nehme an, es gibt einen viel besseren Ort, ich habe versucht, mit einem Service Provider, aber ich konnte nicht anhängen GruppeSo weisen Sie einem Gast eine Rolle und Berechtigungen zu

if($this->auth->guest()) 
    { 
     $user = new User(); 
     $user->username = 'Guest'; 

     $role = Role::where('name', '=', 'guest') 
       ->with('perms') 
       ->first(); 


     $user->perms = new Collection(); 
     $user->perms->add($role); 

     $perms = explode('|', $permissions); 

     foreach($user->perms as $p) { 
      foreach($p->perms as $pp) { 
       foreach($perms as $perm) { 
        if($perm === $pp->name) 
         return $next($request); 
       } 
      } 
     } 
    } 

Wie Sie sehen diese, im Idealfall in ich mag Middleware sehr spezifisch sind, die Rolle an der ersten möglichen Instanz angreifen, so dass es

Antwort

0

nur Sitzungen in jedem Teil der Anwendung verwendet werden kann, verwenden Dieser Fall

session::put('role',$role); 

und in der vi ew

@if(Session::has('role') == 'whatever') 
// show this content 

gleiche gilt für Berechtigungen eine Reihe von perms fügen Sie dann zu der Sitzung verwenden in_array

0

Ich denke, dass der Ort richtig ist, aber denken Sie daran, dass Sie bei jeder Anfrage diese Validierung ausgeführt werden, es sieht schwer. Also, warum nicht Sitzung oder Cache verwenden?

Mit Sitzung:

if($this->auth->guest()){ 
    $userPerms = []; 

    if (\Session::has('permissions')){ 
     $userPerms = \Session::get('permissions'); 
    } 
    else{ 
     $user = new User(); 
     $user->username = 'Guest'; 
     // the rest of your code here... 
     $userPerms = $user->perms; 

     // update the session the first time 
     \Session::put('permissions', userPerms) 
    } 

    // comparison here 
} 

Sie können die gleiche Logik anwenden Cache Provider.