2016-07-05 51 views
0

我試圖隱藏來自特定用戶的帖子。只有帖子的創建者可以編輯或查看帖子。如何在Laravel中處理索引路由的授權

一切工作正常我的節目視圖。

我PostController中:

public function show($id) 
{ 
    //auth()->loginUsingId(3); 

    // Find Blog post by id 
    $post = Post::findOrFail($id); 

    if(Gate::denies('show-post', $post)) { 
     abort(403, 'Access denied'); 
    }; 

    return view('posts.show')->withPost($post); 
} 

但是我不知道該怎麼做同樣的事情對我的索引視圖。我無法通過參數索引($ id)。

有人能指出我正確的方向嗎?

感謝

+0

你應該看看這裏:https://laravel.com/docs/master/authorization –

+0

謝謝panagiotis,這是我的例子正在合作。再次,一切正常,我的show方法。但我不知道如何用我的索引方法實現它 –

+0

@SteveBrown:索引方法應該返回用戶創建的所有帖子? – Moppo

回答

1

如果索引視圖應該只返回由用戶創建的職位,你應該到這樣的事情:

public function index() 
{ 
    //get the auth user id 
    $user_id = Auth::user()->id; 

    //get only the posts where the user is the owner 
    $posts = Post::where('owner', $user_id)->get();  

    return view('posts.index')->withPost($posts); 
} 

你不需要在這裏使用的Gate門面,作爲你確定你只能獲得當前認證用戶可以訪問的帖子

+0

hmmmm這會引發錯誤 - > SQLSTATE [42S22]:Column not found:1054'where子句'中的未知列'owner'(SQL:select * from'posts',其中owner'= 7) –

+2

@SteveBrown:列名僅僅是一個例子,你應該替換它與數據庫中的帖子所有者列的名稱相同,如果有的話。如果您沒有適用於所有者的專欄,則應創建專欄並在創建專欄時填寫專欄。或者您應該使用郵件和用戶之間的實際關係來獲取用戶創建的帖子 – Moppo

+0

Woohooooo,謝謝! –