name('home'); Route::get('/about', [HomeController::class, 'about'])->name('about'); // ── 网站地图 ───────────────────────────────────────────── Route::get('/sitemap.xml', [SitemapController::class, 'xml'])->name('sitemap.xml'); Route::get('/sitemap', [SitemapController::class, 'index'])->name('sitemap'); Route::get('/robots.txt', [SitemapController::class, 'robots'])->name('robots'); // 图形验证码(登录防暴力破解,访客可用,写入 session) Route::get('/captcha', [CaptchaController::class, 'show'])->name('captcha'); Route::get('/contact', [ContactController::class, 'show'])->name('contact'); Route::post('/contact', [ContactController::class, 'store']); Route::middleware('guest')->group(function () { Route::get('/login', [LoginController::class, 'show'])->name('login'); Route::post('/login', [LoginController::class, 'store']); Route::get('/register', [RegisterController::class, 'show'])->name('register'); Route::post('/register', [RegisterController::class, 'store']); // 管理员独立登录页(与普通用户登录分离) Route::get('/admin/login', [AdminLoginController::class, 'show'])->name('admin.login'); Route::post('/admin/login', [AdminLoginController::class, 'store']); }); // ── 全站搜索 ─────────────────────────────────────────────── Route::get('/search', [SearchController::class, 'index'])->name('search'); Route::post('/logout', [LoginController::class, 'destroy']) ->middleware('auth') ->name('logout'); Route::middleware('auth')->group(function () { Route::get('/settings', [AuthSettingsController::class, 'index'])->name('auth.settings'); Route::post('/settings/password', [AuthSettingsController::class, 'updatePassword'])->name('auth.settings.password'); // 用户投稿文章 Route::get('/articles/submit', [ArticleController::class, 'create'])->name('articles.submit'); Route::post('/articles/submit', [ArticleController::class, 'storeSubmission'])->name('articles.submit.store'); Route::get('/articles/mine', [ArticleController::class, 'mine'])->name('articles.mine'); // 通用图片上传(文章插图 / 封面),登录用户可用 Route::post('/upload', [UploadController::class, 'store'])->name('upload'); }); // ── 前台展示 ─────────────────────────────────────────────── Route::get('/products', [ProductController::class, 'index'])->name('products.index'); Route::get('/products/{product:slug}', [ProductController::class, 'show'])->name('products.show'); Route::get('/articles', [ArticleController::class, 'index'])->name('articles.index'); Route::get('/articles/{article:slug}', [ArticleController::class, 'show'])->name('articles.show'); Route::get('/solutions', [SolutionsController::class, 'index'])->name('solutions.index'); Route::get('/solutions/{solution:slug}', [SolutionsController::class, 'show'])->name('solutions.show'); Route::get('/news', [NewsController::class, 'index'])->name('news.index'); Route::get('/news/{news:slug}', [NewsController::class, 'show'])->name('news.show'); Route::get('/glossary', [GlossaryController::class, 'index'])->name('glossary.index'); Route::get('/glossary/{glossary_term:slug}', [GlossaryController::class, 'show'])->name('glossary.show'); Route::get('/forum', [ForumController::class, 'index'])->name('forum.index'); Route::get('/forum/board/{board:slug}', [ForumController::class, 'board'])->name('forum.board'); Route::get('/forum/thread/{thread}', [ForumController::class, 'thread'])->name('forum.thread'); Route::post('/forum/threads', [ForumController::class, 'store'])->name('forum.threads.store')->middleware('auth'); Route::post('/forum/threads/{thread}/replies', [ForumController::class, 'reply'])->name('forum.replies.store')->middleware('auth'); // ── 后台管理 ─────────────────────────────────────────────── // 进入后台:admin 中间件负责「游客→/admin/login 重定向」与「非后台角色→403」, // 各模块再按权限点(can:)细粒度门禁。 Route::middleware(['admin'])->prefix('admin')->name('admin.')->group(function () { Route::get('/', [DashboardController::class, 'index'])->name('dashboard')->middleware('can:dashboard.view'); Route::resource('categories', AdminCategoryController::class)->middleware('can:categories.view'); Route::resource('products', AdminProductController::class)->middleware('can:products.view'); Route::resource('articles', AdminArticleController::class)->middleware('can:articles.view'); Route::resource('solutions', AdminSolutionController::class)->middleware('can:solutions.view'); Route::resource('news', AdminNewsController::class)->middleware('can:news.view'); Route::resource('glossary', AdminGlossaryController::class)->parameter('glossary', 'glossary_term')->middleware('can:glossary.view'); Route::resource('contacts', AdminContactController::class)->only(['index', 'show', 'destroy'])->middleware('can:contacts.view'); Route::get('users', [UserController::class, 'index'])->name('users.index')->middleware('can:users.view'); Route::get('users/create', [UserController::class, 'create'])->name('users.create')->middleware('can:users.create'); Route::post('users', [UserController::class, 'store'])->name('users.store')->middleware('can:users.create'); Route::get('users/{user}/edit', [UserController::class, 'edit'])->name('users.edit')->middleware('can:users.view'); Route::put('users/{user}', [UserController::class, 'update'])->name('users.update')->middleware('can:users.assign_role'); Route::post('users/{user}/reset-password', [UserController::class, 'resetPassword'])->name('users.reset-password')->middleware('can:users.reset_password'); Route::delete('users/{user}', [UserController::class, 'destroy'])->name('users.destroy')->middleware('can:users.delete'); Route::get('settings', [AdminSettingsController::class, 'index'])->name('settings')->middleware('can:settings.view'); Route::put('settings', [AdminSettingsController::class, 'update'])->name('settings.update')->middleware('can:settings.update'); // 外观管理:导航菜单 + 首页 Hero 轮播 Route::resource('menus', AdminMenuController::class)->middleware('can:appearance.view'); Route::post('menus/{menu}/move', [AdminMenuController::class, 'move'])->name('menus.move')->middleware('can:appearance.update'); Route::post('menus/{menu}/toggle', [AdminMenuController::class, 'toggle'])->name('menus.toggle')->middleware('can:appearance.update'); Route::resource('hero-slides', AdminHeroSlideController::class)->middleware('can:appearance.view'); Route::post('hero-slides/{hero_slide}/move', [AdminHeroSlideController::class, 'move'])->name('hero-slides.move')->middleware('can:appearance.update'); Route::post('hero-slides/{hero_slide}/toggle', [AdminHeroSlideController::class, 'toggle'])->name('hero-slides.toggle')->middleware('can:appearance.update'); Route::post('hero/mode', [AdminHeroSlideController::class, 'setMode'])->name('hero.mode')->middleware('can:appearance.update'); // 统一审核队列(文章投稿 / 论坛帖子 / 回复) Route::get('moderation', [ModerationController::class, 'index'])->name('moderation.index')->middleware('can:articles.moderate,forum.moderate'); Route::post('moderation/articles/{article}/approve', [ModerationController::class, 'approveArticle'])->name('moderation.articles.approve')->middleware('can:articles.moderate'); Route::post('moderation/articles/{article}/reject', [ModerationController::class, 'rejectArticle'])->name('moderation.articles.reject')->middleware('can:articles.moderate'); Route::post('moderation/threads/{thread}/approve', [ModerationController::class, 'approveThread'])->name('moderation.threads.approve')->middleware('can:forum.moderate'); Route::post('moderation/threads/{thread}/reject', [ModerationController::class, 'rejectThread'])->name('moderation.threads.reject')->middleware('can:forum.moderate'); Route::post('moderation/replies/{reply}/approve', [ModerationController::class, 'approveReply'])->name('moderation.replies.approve')->middleware('can:forum.moderate'); Route::post('moderation/replies/{reply}/reject', [ModerationController::class, 'rejectReply'])->name('moderation.replies.reject')->middleware('can:forum.moderate'); Route::name('forum.')->prefix('forum')->group(function () { Route::resource('boards', ForumBoardController::class)->middleware('can:forum.view'); Route::resource('threads', ForumThreadController::class)->only(['index', 'destroy'])->middleware('can:forum.view'); }); // 数据库管理:迁移状态查看 + 一键升级(后台随时升级数据库) Route::get('database', [DatabaseController::class, 'index'])->name('database')->middleware('can:settings.update'); Route::post('database/upgrade', [DatabaseController::class, 'upgrade'])->name('database.upgrade')->middleware('can:settings.update'); });