Laravel - 与软删除数据绑定的隐式路由模型

时间:2016-04-24 15:01:22

标签: php laravel routes laravel-5.2

我遇到一个小问题。有两个用户角色,一个是普通成员,一个是管理员。会员可以删除博客,他们在删除(软删除)博客后将无法看到博客,而管理员仍然可以看到该博客,即使它已被软删除。

示例代码:

// Route file
Route::get('/blog/{blog}', 'BlogController@show');

// 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()值。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分: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.
}