检查用户是否是订阅者并显示 X 路由,否则显示 Y 路由

Check if a user is a subscriber and display X route else display Y route

在我的项目中,我有一个显示主题的路径,如下所示。

Route::get('/voting-topics', [PublicTopicController::class, 'index'])->name('public-topics');

投票主题页面显示了从我的数据库中提取的主题列表,它们被标记为 public。

我面临的问题是我还想为订阅者显示完整的主题列表。

目前,我正在为订阅者使用这条路线

Route::group(['middleware' => ['subscriber']], function () {
    Route::get('/dashboard/topics', [MemberTopicController::class, 'topics'])->name('dashboard.topics');
});

我认为这不是最好的方式,我更愿意将所有主题都放在 /topics 上,但只显示 none 订阅者的 public 个主题。

我想我的问题是,如果用户是订户并执行类似操作,是否有办法检查我的路线。

if( subscriber()->user() ) {
    Route::post('/topics', [TopicController::class, 'index'])->name('topics');
} else {
    Route::post('/topics', [TopicController::class, 'publicTopic'])->name('topics');
}

我不会声明两条不同的路由,而是声明一条路由,然后根据订阅者状态在控制器中决定要做什么。

类似于:

Route::get('/topics', [TopicController::class, 'topics'])->name('topics');

在你的控制器中:

public function topics() {
    if (subscriber()->user()) {
        return $this->subscriberTopics();
    } else {
        return $this->publicTopics();
    }
}


private function publicTopics() {
// public topics stuff
}

private function subscriberTopics() {
// subscriber topics stuff
}