Files
medical-mall/docs/ops/2026-02-10__admin__user-level-db-design.md

47 lines
2.3 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.
# 用户等级数据库设计与 RPCv1
## 摘要
为“用户等级”功能新增数据库表 `public.ak_user_levels`(支持逻辑删除),并提供 admin 侧管理 RPC分页列表/保存/删除/状态切换/展示切换)。同时启用 RLS消费者端仅可读取“启用且展示且未删除”的等级。
## 动机
- 当前 admin 用户等级页面存在硬编码 mock 数据,需要接入数据库。
- 统一等级数据口径,为消费者端展示等级提供可靠数据源。
## 影响范围
- 数据库:新增表、索引;启用 RLS 并新增 select policy新增 5 个 admin RPC。
- 前端:后续可通过 `services/` 接入新 RPC移除 `pages/mall/admin/user/level.uvue` 中 mock。
## 变更清单
- 新增文件:
- `docs/sql/10_schema/user/ak_user_levels_v1.sql`
- `docs/sql/20_rls/user/ak_user_levels_rls_v1.sql`
- `docs/sql/30_rpc/user/rpc_admin_user_level_list_v1.sql`
- `docs/sql/30_rpc/user/rpc_admin_user_level_save_v1.sql`
- `docs/sql/30_rpc/user/rpc_admin_user_level_delete_v1.sql`
- `docs/sql/30_rpc/user/rpc_admin_user_level_set_visible_v1.sql`
- `docs/sql/30_rpc/user/rpc_admin_user_level_set_status_v1.sql`
## 兼容性与风险
- consumer 端读取RLS 仅开放 `anon/authenticated` 对可见/启用/未删除等级的 SELECT不会暴露删除或禁用的数据。
- admin 端管理:通过 `SECURITY DEFINER` RPC 并进行角色鉴权,避免直通表的全局权限。
- 逻辑删除:通过 `deleted_at` 字段实现,避免历史引用破坏。
## 回滚方案
- 回滚 schema删除表 `ak_user_levels`(需人工确认,不在本次脚本中提供)。
- 回滚 rpc删除对应函数需人工确认不在本次脚本中提供
- 回滚 rls移除 policy 并禁用 RLS需人工确认
## 验证方式
- 在 SQL 控制台依次执行schema -> rls -> rpc。
- 使用 admin 账号调用:
- `rpc_admin_user_level_save` 创建数据
- `rpc_admin_user_level_list` 验证分页返回
- `rpc_admin_user_level_set_visible/status` 验证更新
- `rpc_admin_user_level_delete` 验证逻辑删除
- 使用普通账号/匿名访问验证仅能看到启用且展示的数据。
## 关联文档
- `docs/project_spec/AGENT_PROJECT_SPEC.md`
- `docs/sql/30_rpc/auth/get_current_user_role_v1.sql`
- `docs/sql/11_roles_and_permissions_strategy.md`