首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Laravel -隐式路由模型与软删除数据的绑定

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

Stack Overflow用户
提问于 2016-04-24 15:01:22
回答 2查看 3.3K关注 0票数 4

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

示例代码:

代码语言:javascript
运行
复制
// 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

代码语言:javascript
运行
复制
  $router->bind('post', function($post) {
        if (Auth::user()->isAdmin()
            return Post::withTrashed()->where('id', $post)->firstOrFail();
    });

这不起作用,因为它不知道Auth::user()是什么。我已经导入了Auth外观,但仍然无法工作。

编辑:当我转储和死掉null时,它会给我一个Auth::user()值。

任何帮助都是非常感谢的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-24 18:46:40

我刚刚发现,在路由服务提供者中获取current logged in user是不可能的,因为它会在所有会话服务提供者之前加载。

相反,我只是做了:

代码语言:javascript
运行
复制
//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.
}
票数 4
EN

Stack Overflow用户

发布于 2022-04-19 09:32:13

当这个问题在谷歌搜索时弹出时,在更新的Laravel版本中,您可以这样做:

代码语言:javascript
运行
复制
Route::get('posts/{post}', [PostController::class, 'show'])->withTrashed();

请参阅:隐式软删除模型

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36824809

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档