SuperAPI AI 工具集

supabase-expert

编程与开发

查看项目

更新于 10-16 05:29

技能介绍

用途

Supabase Expert 是一个针对 Supabase 开发的 AI 技能,使用时用户被设定为资深 Supabase 工程师,目标是在涉及 Supabase、Supabase Auth、Supabase Database、Supabase Storage、Supabase Edge Functions、Supabase Realtime、行级安全(Row Level Security)等任何任务中被触发使用,用于编写生产级 Supabase 代码。

核心原则

  • RLS First:每张表都必须启用行级安全,没有例外。
  • 类型安全:使用 supabase gen types 从数据库架构生成 TypeScript 类型。
  • Edge Functions:服务端逻辑使用基于 Deno 的 Edge Functions,而不是在客户端变通实现。
  • Auth 集成:使用 Supabase Auth 并正确管理会话,不要自行实现 JWT。
  • Realtime:使用 Supabase Realtime 频道实现实时更新,而不是轮询。

项目设置

在已有项目中初始化 Supabase:

npx supabase init
npx supabase start        # Local dev with Docker
npx supabase db push      # Push migrations to remote

生成 TypeScript 类型:

npx supabase gen types typescript --local > src/types/database.ts

数据库架构模式

  • 启用 RLS:ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY;
  • 用户只能读写自己的数据:为 SELECT/UPDATE 创建使用 auth.uid() = id 的策略,UPDATE 同时使用 USING 和 WITH CHECK。
  • 软删除模式:为表添加 deleted_at TIMESTAMPTZ DEFAULT NULL,并创建策略隐藏软删除记录(USING (deleted_at IS NULL))。
  • 多租户模式:通过查询 org_members 表中 user_id = auth.uid() 的 org_id 来隔离文档等数据。

客户端设置(Next.js)

提供浏览器客户端(createBrowserClient)与服务端客户端(createServerClient)的创建方式,使用 @supabase/ssr 包和环境变量 NEXT_PUBLIC_SUPABASE_URL、NEXT_PUBLIC_SUPABASE_ANON_KEY,服务端通过 next/headers 的 cookies 传递会话,并使用生成的 Database 类型。

Edge Functions

示例为 supabase/functions/send-welcome-email/index.ts,使用 Deno 的 serve 与 @supabase/supabase-js,通过 SUPABASE_URL 与 SUPABASE_SERVICE_ROLE_KEY 环境变量创建客户端,从 profiles 表查询用户信息,返回 JSON 响应。代码注释表明可经 Resend/SendGrid 等发送邮件。

Realtime 订阅

  • 监听频道中的新消息:使用 supabase.channel(...).on('postgres_changes', ...),可按 schema、table 和 filter(如 room_id=eq.1)过滤 INSERT 事件。
  • 在线状态(Presence):使用 presence 事件与 presenceState(),在订阅成功后调用 track 上报用户信息。

Storage 文件上传

  • 上传:supabase.storage.from('avatars').upload(path, file, { cacheControl, upsert, contentType })。
  • 私有 bucket 获取签名 URL:createSignedUrl。
  • 公开 bucket 获取公共 URL:getPublicUrl。

迁移最佳实践

迁移文件示例(supabase/migrations/20240101000000_create_profiles.sql)包括:

  • 创建 profiles 表,主键外键关联 auth.users(id) 并设置级联删除。
  • 注册时自动创建 profile:用 handle_new_user() 函数与 on_auth_user_created 触发器,从 raw_user_meta_data 提取 full_name 与 avatar_url。
  • updated_at 触发器:set_updated_at() 函数与 set_profiles_updated_at 触发器,在更新前设置 updated_at = now()。

检查清单

  • 所有表启用 RLS
  • 从架构生成 TypeScript 类型
  • Service role key 绝不暴露给客户端
  • 敏感操作使用 Edge Functions
  • API 路由使用正确的 auth 中间件
  • 频繁查询的列建立数据库索引
  • 推送前在本地测试迁移
  • 配置 Storage bucket 策略
  • 组件卸载时清理 Realtime 订阅

限制

资料未说明该技能的收费、定价、支持平台范围或效果保证,相关事实暂未提供。