# 权限、物流及系统基础设施全量集成报告

## 摘要
本次对 Admin 侧进行了基础设施补齐与核心管理模块重构，完成以下闭环：
- 新增系统统一 KV 配置表 `ml_system_configs`，并提供管理端 RPC 读写；
- 建立 RBAC 权限体系（角色/权限/关联表），并以管理端 RPC 提供 CRUD；
- 新增物流资源表（配送员、提货点），并以管理端 RPC 提供 CRUD；
- 将 Admin 侧相关页面从 Mock/静态数据切换为真实 RPC 数据流。

## 动机
商城核心业务（商品、订单等）已基本闭环，但系统底座模块（权限控制、系统开关、物流资源）仍长期处于 Mock/静态模拟阶段，无法满足生产环境可审计、可配置、可授权的要求，因此需要补齐数据库资产（Schema/RLS/RPC）与前端服务层。

## 影响范围
- **数据库**：新增表、启用 RLS、增加 `SECURITY DEFINER` RPC，影响 admin/analytics 权限闭环。
- **管理端页面**：权限管理（管理员/角色/菜单权限）、物流设置（配送员/提货点）、系统配置、统计概览、系统信息页面。
- **服务层**：新增 `services/admin/*Service.uts`，统一数据访问出口（页面不再直连底层 client）。

## 变更清单
> 以提交 `5d00e3d` 为准（`feat(admin): complete integration of auth, delivery, and system infrastructure modules`）。

### 新增文件
#### 数据库（权威入库：`docs/sql/`）
- Schema（`docs/sql/10_schema/`）
  - `docs/sql/10_schema/admin/ml_system_configs_v1.sql`
  - `docs/sql/10_schema/user/ak_auth_system_v1.sql`
  - `docs/sql/10_schema/delivery/ak_delivery_system_v1.sql`
- RLS（`docs/sql/20_rls/`）
  - `docs/sql/20_rls/admin/ml_system_configs_rls_v1.sql`
  - `docs/sql/20_rls/auth/ak_auth_rls_v1.sql`
  - `docs/sql/20_rls/delivery/ak_delivery_rls_v1.sql`
- RPC（`docs/sql/30_rpc/`）
  - Admin
    - `docs/sql/30_rpc/admin/rpc_admin_get_overall_stats_v1.sql`
    - `docs/sql/30_rpc/admin/rpc_admin_get_system_info_v1.sql`
    - `docs/sql/30_rpc/admin/rpc_admin_system_config_get_v1.sql`
  - Auth
    - `docs/sql/30_rpc/auth/rpc_admin_get_admin_list_v1.sql`
    - `docs/sql/30_rpc/auth/rpc_admin_get_role_list_v1.sql`
    - `docs/sql/30_rpc/auth/rpc_admin_save_role_v1.sql`
    - `docs/sql/30_rpc/auth/rpc_admin_delete_role_v1.sql`
    - `docs/sql/30_rpc/auth/rpc_admin_get_permission_list_v1.sql`
    - `docs/sql/30_rpc/auth/rpc_admin_save_permission_v1.sql`
    - `docs/sql/30_rpc/auth/rpc_admin_delete_permission_v1.sql`
  - Delivery
    - `docs/sql/30_rpc/delivery/rpc_admin_get_delivery_staff_list_v1.sql`
    - `docs/sql/30_rpc/delivery/rpc_admin_save_delivery_staff_v1.sql`
    - `docs/sql/30_rpc/delivery/rpc_admin_delete_delivery_staff_v1.sql`
    - `docs/sql/30_rpc/delivery/rpc_admin_get_delivery_station_list_v1.sql`
    - `docs/sql/30_rpc/delivery/rpc_admin_save_delivery_station_v1.sql`
    - `docs/sql/30_rpc/delivery/rpc_admin_delete_delivery_station_v1.sql`

#### 前端服务层（`services/admin/`）
- `services/admin/systemConfigService.uts`
- `services/admin/authService.uts`
- `services/admin/deliveryService.uts`
- `services/admin/maintainService.uts`

### 修改文件
#### 数据库
- `docs/sql/30_rpc/admin/rpc_admin_system_config_save_v1.sql`

#### 页面（`pages/`）
- `pages/mall/admin/setting/auth/admin.uvue`
- `pages/mall/admin/setting/auth/role.uvue`
- `pages/mall/admin/setting/auth/permission.uvue`
- `pages/mall/admin/setting/delivery/staff.uvue`
- `pages/mall/admin/setting/delivery/station.uvue`
- `pages/mall/admin/setting/system/config.uvue`
- `pages/mall/admin/statistic/index.uvue`
- `pages/mall/admin/maintain/sys/info.uvue`
- `pages/mall/admin/app/mobile/config.uvue`
- `pages/mall/admin/app/pc/config.uvue`

### 删除文件
- 无

## 兼容性与风险
- **权限口径依赖**：本项目角色字段权威为 `public.ak_users.role`。RPC 入口鉴权依赖该字段（至少 `admin` / `analytics`），若数据不一致会导致管理端接口不可用。
- **RLS 与 RPC 闭环**：Auth/Delivery 等表启用 RLS 后，若绕开 RPC 进行直接表访问会被拒绝；需确保前端全部走 service -> RPC。
- **配置键名约束**：`ml_system_configs` 使用 `config_key` 唯一约束；变更 key 会造成读取不到旧配置。
- **配送员/提货点数据影响**：提货点对 `anon/authenticated` 开放 `SELECT`（受 `status=1` 限制），属于预期的消费者端只读能力。

## 回滚方案
- **数据库回滚**：
  1. 依次 `DROP FUNCTION IF EXISTS ...` 移除本次新增 RPC（按 `docs/sql/30_rpc/{admin,auth,delivery}/` 列表）。
  2. `ALTER TABLE ... DISABLE ROW LEVEL SECURITY` 或移除新增 policy（对应 `docs/sql/20_rls/`）。
  3. `DROP TABLE IF EXISTS` 移除新增表（谨慎，需确认无业务数据依赖）。
- **代码回滚**：
  - `git revert 5d00e3d`（推荐）或 `git checkout <old_commit> -- <paths>` 恢复页面与 service 变更。

## 验证方式
1. **系统配置**：进入“系统设置”修改任意字段（如网站名称）-> 保存 -> 刷新确认持久化。
2. **权限管理**：
   - 角色管理：新增角色 -> 列表可见；
   - 菜单权限：新增权限项 -> 列表可见；
   - 管理员列表：能拉取 `rpc_admin_get_admin_list` 并显示角色标签。
3. **物流设置**：新增配送员/提货点 -> 列表可见；切换启用/显示状态后刷新保持一致。
4. **统计概览**：进入数据概览页，确认 RPC 返回聚合指标且页面可渲染。

## 关联文档
- `docs/project_spec/AGENT_PROJECT_SPEC.md`（操作文档规范与 SQL 入库规范）

> 注意：规范要求对照 `docs/sql/11_roles_and_permissions_strategy.md`，但仓库当前未找到该文件。此处已按规范第 5/7 节口径执行（角色字段 `ak_users.role`、RLS 默认收口、全局访问走 SECURITY DEFINER RPC）。建议后续补齐该策略文档或确认其真实路径，并在此处更新引用。

---

## SQL 安全评审报告（逐文件）
> 评审结论枚举：Reject / High / OK。评审标准：AGENT_PROJECT_SPEC.md 第 7 节。

### Schema
#### SQL 安全评审报告
- **对象**：`docs/sql/10_schema/admin/ml_system_configs_v1.sql`
- **目标**：提供统一 KV 配置表用于管理端持久化系统/接口配置。
- **结论**：OK
- **涉及对象**：表 `ml_system_configs`（DDL）；无 grants。
- **RLS**：由对应 RLS 文件启用。
- **风险点**：低（仅 DDL）。
- **整改建议**：无。
- **准入建议**：允许进入 `docs/sql/`。

#### SQL 安全评审报告
- **对象**：`docs/sql/10_schema/user/ak_auth_system_v1.sql`
- **目标**：建立 RBAC（角色/权限/关联）基础表。
- **结论**：OK
- **涉及对象**：`ak_roles`, `ak_permissions`, `ak_admin_roles`, `ak_role_permissions`。
- **风险点**：低（仅 DDL）；注意外键引用 `ak_users`。
- **整改建议**：可选：为 `ak_roles.updated_at` 增加触发器自动更新（非必须）。
- **准入建议**：允许进入 `docs/sql/`。

#### SQL 安全评审报告
- **对象**：`docs/sql/10_schema/delivery/ak_delivery_system_v1.sql`
- **目标**：新增配送员与提货点基础表。
- **结论**：OK
- **涉及对象**：`ml_delivery_staff`, `ml_delivery_stations`。
- **风险点**：低（仅 DDL）。
- **整改建议**：可选：对 phone 增加格式校验（应用层）。
- **准入建议**：允许进入 `docs/sql/`。

### RLS
#### SQL 安全评审报告
- **对象**：`docs/sql/20_rls/admin/ml_system_configs_rls_v1.sql`
- **目标**：启用系统配置表 RLS，限制直接表访问。
- **结论**：OK
- **RLS**：启用；策略以 RPC 为主。
- **风险点**：低。
- **整改建议**：如需管理员直连查询，可增加更严格 policy（建议仍走 RPC）。
- **准入建议**：允许进入 `docs/sql/`。

#### SQL 安全评审报告
- **对象**：`docs/sql/20_rls/auth/ak_auth_rls_v1.sql`
- **目标**：启用 RBAC 表 RLS，默认不开放直接访问。
- **结论**：OK
- **风险点**：低；默认闭网符合规范。
- **整改建议**：无。
- **准入建议**：允许进入 `docs/sql/`。

#### SQL 安全评审报告
- **对象**：`docs/sql/20_rls/delivery/ak_delivery_rls_v1.sql`
- **目标**：启用物流表 RLS；提货点开放消费者端只读（`status=1`）。
- **结论**：OK
- **风险点**：中（对 `anon/authenticated` 开放 select）；但 `USING (status=1)` 有约束，符合业务需求。
- **整改建议**：若需进一步限制字段暴露，可改走 RPC 只返回必要字段。
- **准入建议**：允许进入 `docs/sql/`。

### RPC
#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/admin/rpc_admin_system_config_save_v1.sql`
- **目标**：保存系统配置（upsert）。
- **结论**：OK
- **SECURITY DEFINER**：是；`search_path` 固定：是；入口鉴权：是（`role IN ('admin','analytics')`）。
- **风险点**：低。
- **整改建议**：可选：对 `p_key` 增加白名单约束（按业务需要）。
- **准入建议**：允许进入 `docs/sql/`。

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/admin/rpc_admin_system_config_get_v1.sql`
- **目标**：读取系统配置。
- **结论**：OK
- **SECURITY DEFINER**：是；`search_path` 固定：是；入口鉴权：是。
- **风险点**：低。
- **整改建议**：无。
- **准入建议**：允许进入 `docs/sql/`。

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/admin/rpc_admin_get_overall_stats_v1.sql`
- **目标**：返回聚合统计指标（概览页）。
- **结论**：OK
- **风险点**：低（聚合返回）。
- **整改建议**：确保有合理的索引与时间过滤（如后续扩展）。
- **准入建议**：允许进入 `docs/sql/`。

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/admin/rpc_admin_get_system_info_v1.sql`
- **目标**：返回系统信息（用于维护页）。
- **结论**：OK
- **风险点**：中（可能暴露服务器信息）；需确保返回字段不包含密钥。
- **整改建议**：后续如需增加字段，必须最小化并脱敏。
- **准入建议**：允许进入 `docs/sql/`。

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/auth/rpc_admin_get_admin_list_v1.sql`
- **目标**：分页获取管理员列表（关联角色名）。
- **结论**：OK
- **风险点**：中（涉及用户表字段）；当前仅返回必要字段，未返回敏感信息。
- **整改建议**：如扩展字段，避免返回手机号/财务信息等。
- **准入建议**：允许进入 `docs/sql/`。

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/auth/rpc_admin_get_role_list_v1.sql`
- **目标**：分页获取角色列表。
- **结论**：OK

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/auth/rpc_admin_save_role_v1.sql`
- **目标**：新增/更新角色。
- **结论**：OK

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/auth/rpc_admin_delete_role_v1.sql`
- **目标**：删除角色。
- **结论**：OK
- **风险点**：中（物理删除）；需注意被引用时的级联行为。
- **整改建议**：如需审计/恢复，考虑改为软删除。

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/auth/rpc_admin_get_permission_list_v1.sql`
- **目标**：获取全量权限/菜单列表。
- **结论**：OK

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/auth/rpc_admin_save_permission_v1.sql`
- **目标**：新增/更新权限/菜单。
- **结论**：OK

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/auth/rpc_admin_delete_permission_v1.sql`
- **目标**：删除权限/菜单。
- **结论**：OK
- **风险点**：中（物理删除 + 级联）。

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/delivery/rpc_admin_get_delivery_staff_list_v1.sql`
- **目标**：分页获取配送员列表。
- **结论**：OK

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/delivery/rpc_admin_save_delivery_staff_v1.sql`
- **目标**：新增/更新配送员。
- **结论**：OK

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/delivery/rpc_admin_delete_delivery_staff_v1.sql`
- **目标**：删除配送员。
- **结论**：OK
- **风险点**：中（物理删除）。

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/delivery/rpc_admin_get_delivery_station_list_v1.sql`
- **目标**：分页获取提货点列表。
- **结论**：OK

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/delivery/rpc_admin_save_delivery_station_v1.sql`
- **目标**：新增/更新提货点。
- **结论**：OK

#### SQL 安全评审报告
- **对象**：`docs/sql/30_rpc/delivery/rpc_admin_delete_delivery_station_v1.sql`
- **目标**：删除提货点。
- **结论**：OK
- **风险点**：中（物理删除）。

## 准入结论
- 本次新增/修改 SQL 未出现硬阻断项（裸放权、破坏性操作、无鉴权 SECURITY DEFINER），评审结论整体为 **OK**，允许进入 `docs/sql/` 作为权威口径。
