# 权限、物流及系统基础设施全量集成报告 ## 摘要 本次对 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 -- ` 恢复页面与 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/` 作为权威口径。