2017-04-26 4 views
0

Ich versuche, alle Beiträge anzuzeigen, die zu Admin hinzugefügt werden und nur Beiträge für den angemeldeten Benutzer besitzen.Nur eigenen Beitrag anzeigen und alle Beiträge für Admin in Laravel

Dies ist, was ich in meinem Controller

public function index(Request $request) 
{ 
    $items = Item::where('author_id', Auth::user()->id)->orderBy('id','DESC')->with('author')->paginate(5); 
    return view('items.index',compact('items')) 
     ->with('i', ($request->input('page', 1) - 1) * 5); 
} 

In den Modellen ich diese Beziehungen haben schon versucht. Artikel Modell:

public function author() 
{ 
    return $this->belongsTo(User::class); 
} 

User-Modell

public function posts() 
{ 
    return $this->hasMany(Item::class, 'author_id'); 
} 

Wie kann ich das machen, wenn Admin in der Lage sein wird protokolliert alle Beiträge zu sehen? Ich benutze Entrust ACL und kann jetzt nicht verstehen, wie man die Abfrage ändert

Antwort

1

Just check Rolle und setzen Zustand. Sie müssen nicht zweimal dieselbe Abfrage schreiben.

public function index(Request $request) 
    { 
     $query = Item::orderBy('id','DESC')->with('author'); 
     if(!Auth::user()->hasRole('admin')){ 
       $query=$query->where('author_id', Auth::user()->id); 
      } 
     $items = $query->paginate(5); 
     return view('items.index',compact('items')) 
      ->with('i', ($request->input('page', 1) - 1) * 5); 
    } 
+1

Danke für die Antwort. Perfekt funktioniert. Das erste Mal mit ACLs und ist immer noch ein bisschen verwirrend für mich –

1

Sie können einfach überprüfen, ob der aktuell angemeldete Benutzer ein Administrator ist, und basierend darauf eine Abfrage ausführen.

// If user has 'admin' role (or any other role set in Entrust) fetch all posts, else get all posts where author_id is the same as the logged user 

if(Auth::user()->hasRole('admin')) { 
    $items = Item::orderBy('id','DESC')->with('author')->paginate(5); 
} else { 
    $items = Item::where('author_id', Auth::user()->id)->orderBy('id','DESC')->with('author')->paginate(5); 
} 

hasRole kehrt true oder false[entrust docs]

+0

Danke für die Antwort! Hm, das heißt, ich habe meine Rollen nicht so gemacht, wie es sein muss. Wenn ich Rollen habe: 'admin',' author' und 'user', wie sollte meine routes groups aussehen? Derzeit habe ich 10 Berechtigungen, die ich an jede Rolle anhefte. Ich bin ein wenig verwirrt, wenn ich das konstruiere. –

+0

Wenn ich zum Beispiel 'Entrust :: hasRole ('superadmin')' im eingeloggten Superadmin überprüfe, sehe ich '1', was ich für 'wahr' halte, aber wenn ich zu 'Entrust :: hasRole ('author')' I nichts sehen .. Ich sollte wieder '1' sehen, oder? –

Verwandte Themen