2017-04-26 75 views
0

adminに追加されたすべての投稿を表示しようとしています。自分の投稿のみを表示し、laravelのadminのすべての投稿

これは私が、私はこの関係を持っているモデルでは、私のコントローラ

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

にしようとしたものです。 項目モデル:管理者は、すべての記事を見ることができるようにするためにログインしている場合

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

Userモデル

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

は、どのように私はこれを行うことができますか?私はEntrust ACLを使用しており、今質問をどのように変更するのかを理解できません。

答えて

1

falseちょうど役割と設定された条件をご確認ください。同じクエリを2回書く必要はありません。

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

答えをありがとう。完璧に動作します。初めてACLを扱っても、私はまだ少し混乱しています –

1

現在ログインしているユーザが管理者であるかどうかを確認し、クエリを実行します。

// 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戻りtrueまたは[entrust docs]

+0

ありがとうございました!それは私が自分の役割を果たさなかったことを意味します。私が役割を持っているなら、 'admin'、' author'と 'user'は私のルートグループをどのように見なければなりませんか?現在、私は各ロールに添付する10の権限を持っています。私はこれを構築するにはちょっと混乱しています。 –

+0

たとえば、superadminにログインした状態で 'Entrust :: hasRole( 'superadmin')'をチェックすると '私は' true 'と判断しますが、 'Entrust :: hasRole(' author ')' I何も見ません。もう一度 '1'を見なければなりませんか? –

関連する問題