Files
saasshop/docs/SITE_ADMIN_PLAN.md

231 lines
6.6 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 站点后台最小落地方案(第一阶段)
## 目标
在当前已存在 **总台管理(/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` 作为站点承接层,不急着动数据库实体拆分。**
这条路线最符合当前项目节奏:
- 先打底
- 先把层级立住
- 先保证稳定
- 再逐步把站点能力做实