跳转至

管理、RBAC 与审计

平台的管理面建立在四种角色动态权限目录哈希链审计日志之上。

四种角色

superadmin  →  admin  →  manager  →  user
角色 负责什么
superadmin 任命/撤销管理员、邀请、平台访问模式。唯一承担此职责的角色。
admin 运行系统——自动解析到目录中的全部权限
manager 审核并办理公民申请(gov.review
user 个人区域(personal.view

RBAC——动态权限

角色与权限存放在数据库中,可在运行期变更。完整目录见功能全景

方法 路径 权限
GET /api/v1/rbac/me 需登录——查看自身权限
GET /api/v1/rbac/roles · /permissions roles.manage
POST PUT DELETE /api/v1/rbac/roles… roles.manage
PUT /api/v1/rbac/roles/{id}/permissions roles.manage

权限校验以路由级中间件RequirePermission)实施,而不是在每个处理器中重复,因此新端点漏掉防护的概率大为降低。routes_authz_matrix_test.go 用测试把这张矩阵钉住。

UI:/admin/roles

管理员界面

方法 路径 权限
GET POST /api/v1/admin/users users.manage
PUT /api/v1/admin/users/{id}/role · /active users.manage
DELETE /api/v1/admin/users/{id} users.manage
GET PUT /api/v1/admin/ai/prompts · /{key} settings.manage
POST /api/v1/admin/ai/knowledge/reindex settings.manage

AI 的提示词分层与知识库均从数据库配置——参见 AI 流水线。护栏层硬编码在代码中,永远不可配置。

UI:/admin/dashboard/admin/users/admin/settings/admin/core

超级管理员

方法 路径 说明
GET POST /api/v1/superadmin/admins 列出 / 添加管理员
GET POST /api/v1/superadmin/admins/by-register 按登记号查找 / 添加
PUT /api/v1/superadmin/admins/{id}/grant 授予权限
DELETE /api/v1/superadmin/admins/{id} 收回权限
GET POST DELETE /api/v1/superadmin/invites… 管理邀请
GET PUT /api/v1/superadmin/access-mode 平台访问模式(public / private

入驻与 MFA

成为超级管理员的路径设有多重防护:

  • 邀请白名单——未受邀的邮箱无法启动入驻流程,已使用的邀请不能重复使用。
  • eID 验证——POST /api/v1/auth/superadmin/onboard/eid/start · /start-id · /poll(身份证号或二维码)。
  • Google 或邮箱验证——/onboard/google/onboard/email/send · /verify
  • TOTP 多因素——/onboard/totp/init · /verify,此后每次登录都需 POST /api/v1/auth/superadmin/mfa

TOTP 密钥以 AES-GCM 密文保存——明文从不落库。恢复码仅在生成时展示一次,数据库中只保存其 SHA-256 哈希,用过的码不会再次生效。

所有入驻端点都受 auth 限流器保护(5/分钟)。

UI:/superadmin/login/superadmin/onboard/admin/superadmin

审计

审计日志以哈希链串联,且只追加。每条记录都携带上一条的哈希,因此在中间修改或删除某一行都会把链条打断。

方法 路径 说明
GET /api/v1/audit 分页列表(admin)
GET /api/v1/audit/verify 链条完整性校验

verify 返回 { ok, broken_id }——当 ok=false 时指出第一条被破坏记录的 id

操作者从请求的 RLS 身份中读取,request_id 从上下文中自动取得——调用方无需传入,伪造归属的空间因此很小。

微秒精度

Postgres 的 timestamptz 具有微秒精度。若进入哈希的时间戳未做相应截断, VerifyChain 会因纳秒级偏差而误报——代码对此做了有意的处理。

UI:/admin/audit

安全事件

收集客户端侧的安全信号(CSP 违规等):

  • POST /api/v1/security/events——对任何已登录用户开放(RLS 固定 user_id
  • GET /api/v1/security/events——仅限 admin

UI:/admin/security

外观与品牌

颜色、字体与密度从不硬编码——统一在管理界面中设置。

方法 路径 权限
GET /api/v1/site/appearance 公开(公开页面需要)
PUT /api/v1/site/appearance settings.manage
GET /api/v1/themes/active 公开
GET POST PUT DELETE /api/v1/themes… admin
PUT /api/v1/themes/{id}/active admin

每位用户还可拥有自己的覆盖设置。UI:/admin/themes/admin/settings