Files
saasshop/docs/SITE_ADMIN_PLAN.md

6.6 KiB
Raw Blame History

站点后台最小落地方案(第一阶段)

目标

在当前已存在 总台管理(/admin商家后台(/merchant-admin 的基础上,新增一层 站点后台(/site-admin,让业务结构从“总台 + 商家”演进到更清晰的四级结构:

  • 总台管理
  • 站点后台
  • 商家后台
  • 买家侧前台 / 多端

第一阶段目标不是一次性做完整第三套后台,而是先把 信息架构、路由骨架、权限边界、最小可见页面 搭起来,避免后续继续把“站点”只当成总台里的一个列表概念。


当前判断

1. 现有 Merchant 可作为第一阶段“站点承接层”

当前系统中的 Merchant 已经关联:

  • 管理员
  • 用户
  • 商品
  • 订单
  • 商品分类
  • 导入历史

因此第一阶段无需立刻新增 sites 表或把所有 merchant_id 重构为 site_id

2. 第一阶段采用“显示层先站点化,底层暂借 Merchant 承接”

建议策略:

  • 对外显示 / 页面文案 / 信息架构:使用“站点”口径
  • 底层代码 / 数据库 / 外键字段:暂时保留 Merchant / merchant_id / merchants

这样可以在不打散现有稳定基线的前提下,先把“站点后台”独立成一层真实后台。


推荐落地方式

新增独立后台前缀

建议新增:

  • 登录页:/site-admin/login
  • 后台首页:/site-admin

而不是继续把站点能力塞在 /admin/merchants 页面里硬扩。

原因

如果继续只放在 /admin/merchants

  • 它更像总台中的一个管理页面
  • 难以形成独立后台边界
  • 后续站点仪表盘、站点商品、站点订单、站点商家治理容易继续堆在总台下,结构会越来越混

新增 /site-admin 的收益:

  • 总台 / 站点 / 商家 三层后台职责更清晰
  • 权限边界更容易测试
  • 路由与布局更稳定,后续扩页面更自然
  • 可先做骨架,后续逐页填能力

第一阶段职责边界

总台管理(/admin

面向平台运营方,负责:

  • 平台级配置
  • 多站点治理
  • 全站点级巡检与统计
  • 站点开通 / 状态维护
  • 渠道与系统能力

站点后台(/site-admin

面向站点运营方,负责:

  • 当前站点仪表盘
  • 当前站点范围的商品巡检
  • 当前站点范围的订单监控
  • 当前站点范围的商家管理
  • 站点级运营入口与治理入口

商家后台(/merchant-admin

面向商家经营方,负责:

  • 当前商家商品经营
  • 当前商家订单处理
  • 当前商家用户查看
  • 当前商家导入导出与日常运营

第一阶段建议页面

必做骨架页

  1. /site-admin/login - 站点后台登录页
  2. /site-admin - 站点仪表盘
  3. /site-admin/merchants - 站点商家管理(占位 / 首版列表)
  4. /site-admin/products - 站点商品巡检(占位 / 首版列表)
  5. /site-admin/orders - 站点订单监控(占位 / 首版列表)

可后置

  • /site-admin/users
  • /site-admin/product-categories
  • /site-admin/settings/*
  • /site-admin/products/import-histories

第一阶段重点是把后台层级立起来,不要求所有运营能力一次补齐。


第一阶段技术实现建议

1. 路由

建议新增路由分组:

  • Route::prefix('site-admin')
  • 登录 / 退出登录
  • Route::middleware('site.admin.auth')

2. 控制器命名空间

建议新增:

  • App\Http\Controllers\SiteAdmin\AuthController
  • App\Http\Controllers\SiteAdmin\DashboardController
  • App\Http\Controllers\SiteAdmin\MerchantController
  • App\Http\Controllers\SiteAdmin\ProductController
  • App\Http\Controllers\SiteAdmin\OrderController

第一阶段可复用总台控制器中的部分查询逻辑,但不要直接共用视图布局。

3. 视图目录

建议新增:

  • resources/views/site_admin/layouts/app.blade.php
  • resources/views/site_admin/auth/login.blade.php
  • resources/views/site_admin/dashboard.blade.php
  • resources/views/site_admin/merchants/index.blade.php
  • resources/views/site_admin/products/index.blade.php
  • resources/views/site_admin/orders/index.blade.php

4. 中间件与上下文

建议新增:

  • App\Http\Middleware\SiteAdminAuth
  • App\Http\Controllers\Concerns\ResolvesSiteContext

第一阶段建议:

  • session 中新增 admin_scope = site
  • session 中预留 admin_site_id
  • 在底层尚未拆 sites 表之前,可暂时把 admin_site_id 映射到当前 merchant_id 或映射到“当前选中站点”上下文

第一阶段数据策略

结论

不立刻改表,不立刻拆实体。

当前继续沿用:

  • merchants
  • merchant_id
  • Merchant 模型

同时在设计上约定:

  • 第一阶段 Merchant = 站点承接层
  • 第二阶段如需独立“站点 -> 商家”两层实体关系,再单开数据结构重构方案

这样做的优点:

  • 不打断现有商品 / 订单 / 分类 / 导入历史闭环
  • 不破坏当前测试基线
  • 可以先把三层后台信息架构跑起来

第一阶段账号与权限建议

建议新增角色语义

  • 总台管理员:平台级
  • 站点管理员:站点级
  • 商家管理员:商家级

第一阶段最小实现建议

现阶段先不做完整 RBAC先做边界

  • 总台管理员不能登录站点后台(除非显式赋权)
  • 商家管理员不能登录站点后台
  • 站点管理员不能进入总台管理
  • 站点管理员进入站点后台后,所有查询都受当前站点作用域限制

第一阶段测试建议

新增 Feature 测试:

  1. SiteAdminAccessTest.php
    • 站点后台登录页可访问
    • 站点管理员可登录 /site-admin
  2. SiteAdminProtectedPagesTest.php
    • 未登录访问 /site-admin/* 跳转 /site-admin/login
    • 错作用域账号访问返回 403
  3. SiteAdminBusinessPagesTest.php
    • 仪表盘 / 站点商家 / 站点商品 / 站点订单页可访问
    • 页面关键标题与入口存在

推荐实施顺序

第 1 步

先搭骨架:

  • route
  • controller
  • middleware
  • layout
  • login
  • dashboard

第 2 步

补最小站点业务页:

  • merchants
  • products
  • orders

第 3 步

补访问测试与权限边界测试

第 4 步

再决定是否把总台 /admin/merchants 页面逐步改造成“站点入口页 / 站点开通页”


当前推荐结论

站点后台应正式提上,且推荐以 /site-admin 作为独立后台层新增;第一阶段先复用 Merchant 作为站点承接层,不急着动数据库实体拆分。

这条路线最符合当前项目节奏:

  • 先打底
  • 先把层级立住
  • 先保证稳定
  • 再逐步把站点能力做实