2016-04-24 31 views
3

私は小さな問題があります。 2つのユーザー役割があり、1つは通常のメンバーであり、もう1つは管理者です。メンバーはブログを削除することができ、ブログがソフト削除されても管理者がブログを閲覧できる間に、ブログを削除(ソフト削除)した後でブログを閲覧することはできません。Laravel - ソフト削除されたデータを使った暗黙のルートモデルバインド

例コード:

// Route file 
Route::get('/blog/{blog}', '[email protected]'); 

// BlogController 

public function show(App\Blog $blog) { 
    // It never gets to here if the blog has been soft deleted... 
    // Automatically throws an 404 exception 
} 

私は管理者は、それがソフト削除されます場合でも、ブログを閲覧できるようにしたいが、それは実際に動作しません。私はルートサービスプロバイダーを編集しようとしていますが、私はAuth::user()機能を使用してログインしたユーザーを取得させないようにしているので、私は彼らに許可があるかどうかを確認できます。

マイRouteServiceProvider

$router->bind('post', function($post) { 
     if (Auth::user()->isAdmin() 
      return Post::withTrashed()->where('id', $post)->firstOrFail(); 
    }); 

それはAuth::user()が何であるかを知らないので、これは動作しません。私はAuthファサードを輸入しましたが、まだ動作しません。

編集:ダンプして死ぬと私にはnullの値が与えられますAuth::user()

ご協力いただきまして誠にありがとうございます。

+0

を意味し、「それは私がすることはできません」んか?エラーメッセージ、 ... ? – Nick

+0

申し訳ありませんが、私は質問を更新しました。しかし、それはちょうどnullと言うnullの関数を確認することはできません.. –

答えて

4

current logged in userを取得することは、すべてのセッションサービスプロバイダの前にロードされるため、ルートサービスプロバイダでは不可能であることがわかりました。

は、代わりに私は単純でした:

//Route Service Provider 
$router->bind('post', function($post) 
    return Post::withTrashed()->where('id', $post)->firstOrFail(); 
}); 

// Controller 
public function show(Post $post) { 

// If the post has been trashed and the user is not admin, he cannot see it 
    if (!Auth::user()->isAdmin() && $post->trashed()) 
     abort(404); 

    // Proceed with normal request because the post has not been deleted. 
}