Skip to content

Vibot 企业级审批流程系统实施指南

字数
1137 字
阅读时间
6 分钟

本指南与 docs/database-schema.mddocs/database/ 以及 supabase/schemas/*.sql 同步维护,描述如何在 Supabase 上部署可扩展、多租户、安全可审计的审批系统。

系统概述

Vibot 审批系统由 Supabase Database + Auth + Storage + Realtime + Edge Functions 组成,提供:

  • 多租户隔离:所有业务表含 company_id 并由 current_company_id()has_role()is_project_member() 等函数配合 RLS 强制隔离。
  • 可扩展 RBACusersuser_profilespermissionsrolesuser_rolesrole_permissions 组成 RBAC/ABAC 混合模型,绑定 Supabase Auth (auth.users).
  • 审批流程内核:流程(approval_workflows)+ 版本(approval_workflow_revisions)+ 规则(approval_workflow_rules)+ 审批人配置(approval_approvers)+ SLA(approval_sla_rules)+ 模板(approval_templates)实现可插拔审批逻辑。
  • 通知与超时notifications + notification_channels + approval_request_assignments 联合触发器 apply_assignment_sla() 自动生成提醒/升级记录,Edge Functions 负责邮件/钉钉。
  • 审计追踪approval_actionsaudit_logslog_audit_event()audit_approval_action() 记录所有关键操作,满足法规与合规要求。

技术架构

┌────────────────────────────────────────────────┐
│                  Supabase 平台                 │
├────────────────────────────────────────────────┤
│ PostgreSQL + RLS + pgcrypto + ltree + vector   │
│  ├── Auth:auth.users + public.users + user_profiles
│  ├── RBAC:permissions / roles / role_permissions / user_roles
│  ├── 审批:approval_workflows / revisions / rules / approvers / sla_rules
│  ├── 实例:approval_requests / approval_request_assignments / form_instances
│  ├── 辅助:notifications / notification_channels / approval_actions /
│  │        approval_delegations / audit_logs / approval_templates
│  └── 通用:companies / departments / projects / orders / etc.
├────────────────────────────────────────────────┤
│ Edge Functions (Deno)                          │
│  ├── submit-approval    ├── process-approval   │
│  ├── send-notification  ├── dingtalk-webhook   │
│  └── SLA/批处理任务 (Scheduler)                │
├────────────────────────────────────────────────┤
│ Storage + Realtime + Triggers + pgAudit        │
└────────────────────────────────────────────────┘

数据库设计速览

范畴关键表说明
认证 & 档案usersuser_profilesusers.auth_user_id 关联 auth.users.iduser_profiles 存储头像/偏好/安全元数据。
RBACpermissionsrolesrole_permissionsuser_roles支持公司级与资源级授权(scope_resource_type/id)。
审批流程approval_workflowsapproval_workflow_revisionsapproval_workflow_rulesapproval_approversapproval_sla_rules规则描述 JSON,避免硬编码审批人或条件,SLA 可独立扩展。
审批实例form_templatesform_instancesapproval_templatesapproval_requestsapproval_request_assignmentsapproval_actionsapproval_delegations模板 + 实例 + 待办 + 动作 + 委派全链路管理。
通知 & 审计notification_channelsnotificationsaudit_logs统一通知投递/状态/重试;audit_logs 记录所有审批动作、Edge 函数行为。

详细字段/约束/索引/DDL 请参阅 docs/database-schema.mddocs/database/<domain>/<table>.md(由 scripts/generate_db_docs.py 生成)。

RLS 策略与辅助函数

sql
CREATE OR REPLACE FUNCTION public.current_company_id() RETURNS uuid ...;
CREATE OR REPLACE FUNCTION public.has_role(role_key text) RETURNS boolean ...;
CREATE OR REPLACE FUNCTION public.is_project_member(...) RETURNS boolean ...;
  • 所有业务表 ENABLE ROW LEVEL SECURITY
  • 查询策略:company_id = current_company_id() 且角色满足 has_role() 或资源拥有者判定。
  • 写策略:除平台管理员 (Vibot.admin) 外,通常限定在发起人/审批人/项目成员。
  • 具体策略集中在 supabase/schemas/rls.sql

触发器与自动化

函数说明触发器
apply_assignment_sla()计算 SLA、生成 due_at、自动写 notificationstrg_apply_assignment_slaapproval_request_assignments BEFORE INSERT)
audit_approval_action()将审批动作写入 audit_logstrg_audit_approval_actionapproval_actions AFTER INSERT)
log_audit_event / enqueue_notificationEdge Functions 可复用的审计/通知接口由函数调用

全部定义见 supabase/schemas/functions.sqlsupabase/schemas/triggers.sql

实施步骤

  1. 拉取最新 schema 文档:确认 docs/database-schema.mddocs/database/supabase/schemas/ 已同步。
  2. 生成/复核文档:运行 python3 scripts/generate_db_docs.py 生成 per-table 文档与 docs/database/init.sql
  3. 初始化数据库
    bash
    pnpm supabase db reset
    psql "$DATABASE_URL" -f docs/database/init.sql
    psql "$DATABASE_URL" -f supabase/schemas/auth.sql
    psql "$DATABASE_URL" -f supabase/schemas/approval.sql
    psql "$DATABASE_URL" -f supabase/schemas/functions.sql
    psql "$DATABASE_URL" -f supabase/schemas/triggers.sql
    psql "$DATABASE_URL" -f supabase/schemas/rls.sql
    psql "$DATABASE_URL" -f supabase/schemas/seeds.sql
  4. 配置 Edge Functions / Storage / Realtime(参考 docs/database/supabase-integration.md):
    • Storage:按租户创建桶,设置 storage.objects RLS,路径 company_id/<category>/<uuid>
    • Realtime:订阅 public:approval_requestspublic:approval_request_assignmentspublic:notifications 等频道。
    • Edge Functions:实现 submit-approvalprocess-approvalsend-notification 等函数,统一调用 current_company_id() + has_role()
  5. 运行 supabase db diff:生成迁移文件加入版本控制。
  6. 测试
    • 多租户隔离:不同 company_id 用户不得互访。
    • RBAC:校验角色/权限/Scope。
    • 审批流程:创建模板→发起→分配→动作→委派→SLA 超时→通知。
    • 审计:确认 audit_logs 写入完整 trace。

运维建议

  • 使用 supabase db diff + supabase db push 管理迁移,禁止 Dashboard 手改 schema。
  • 定期审计 user_rolesrole_permissionspermission_change_requests(若启用自动最小授权建议)。
  • 监控 notifications 投递状态与 Edge Functions 日志,必要时重试或告警。
  • 启用 pgaudit、Supabase Insights、Grafana/Sentry 观测性能与安全事件。
  • 需要扩展审批域时,先更新 docs/database-schema.md → 运行生成脚本 → 编写 SQL → 发布迁移,保持文档、DDL、实现一致。

贡献者

The avatar of contributor named as Cai Hongyu Cai Hongyu

文件历史

撰写