初始化
This commit is contained in:
+158
@@ -0,0 +1,158 @@
|
||||
<?php
|
||||
|
||||
use App\Http\Middleware\Admin;
|
||||
use App\Http\Controllers\Auth\LoginController;
|
||||
use App\Http\Controllers\Auth\RegisterController;
|
||||
use App\Http\Controllers\Auth\SettingsController as AuthSettingsController;
|
||||
use App\Http\Controllers\Auth\AdminLoginController;
|
||||
use App\Http\Controllers\Auth\CaptchaController;
|
||||
use App\Http\Controllers\ContactController;
|
||||
use App\Http\Controllers\SearchController;
|
||||
use App\Http\Controllers\HomeController;
|
||||
use App\Http\Controllers\SitemapController;
|
||||
use App\Http\Controllers\ProductController;
|
||||
use App\Http\Controllers\ArticleController;
|
||||
use App\Http\Controllers\SolutionsController;
|
||||
use App\Http\Controllers\NewsController;
|
||||
use App\Http\Controllers\Admin\SolutionController as AdminSolutionController;
|
||||
use App\Http\Controllers\Admin\NewsController as AdminNewsController;
|
||||
use App\Http\Controllers\UploadController;
|
||||
use App\Http\Controllers\GlossaryController;
|
||||
use App\Http\Controllers\ForumController;
|
||||
use App\Http\Controllers\Admin\DashboardController;
|
||||
use App\Http\Controllers\Admin\CategoryController as AdminCategoryController;
|
||||
use App\Http\Controllers\Admin\ProductController as AdminProductController;
|
||||
use App\Http\Controllers\Admin\ArticleController as AdminArticleController;
|
||||
use App\Http\Controllers\Admin\GlossaryController as AdminGlossaryController;
|
||||
use App\Http\Controllers\Admin\ContactController as AdminContactController;
|
||||
use App\Http\Controllers\Admin\UserController;
|
||||
use App\Http\Controllers\Admin\SettingsController as AdminSettingsController;
|
||||
use App\Http\Controllers\Admin\MenuController as AdminMenuController;
|
||||
use App\Http\Controllers\Admin\HeroSlideController as AdminHeroSlideController;
|
||||
use App\Http\Controllers\Admin\ForumBoardController;
|
||||
use App\Http\Controllers\Admin\ForumThreadController;
|
||||
use App\Http\Controllers\Admin\ModerationController;
|
||||
use App\Http\Controllers\Admin\DatabaseController;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
Route::get('/', [HomeController::class, 'index'])->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');
|
||||
});
|
||||
Reference in New Issue
Block a user