SuperAPI AI 工具集

supabase-expert

编程与开发

查看项目

更新于 10-15 10:24

技能介绍

用途

本技能用于帮助构建安全、可扩展的 Supabase 集成,适用于数据库设计、行级安全(RLS)策略、身份认证、Edge Functions 以及实时功能。当需要设计数据库表结构、创建或调试 RLS 策略、设置认证、构建 Edge Functions、实现实时功能、排查 Supabase 问题、优化数据库查询或设置类型生成时,可调用本技能。

核心原则

  1. 安全优先:对包含用户数据的表始终启用 RLS;service role key 仅用于安全的服务端环境;客户端操作使用 anon key;充分测试策略。
  2. 类型安全:从 schema 生成 TypeScript 类型;在应用中使用生成的类型;在 schema 变更后保持类型同步。
  3. 性能:为频繁查询的列建立索引;对大数据集实现分页;使用 select() 限制返回字段;适当缓存。

主要能力

数据库表结构设计

提供基础建表示例,包含标准字段(id 使用 uuid 与 gen_random_uuid()、created_at、updated_at、user_id 外键引用 auth.users 并级联删除、title、description、status 带 check 约束)。同时给出 updated_at 触发器函数与触发器、索引创建示例。还包含一对多关系(如 comments 表)与多对多关系(如 item_tags 表)的外键与关系示例。

行级安全(RLS)

提供基础 RLS 模式:启用 RLS,以及针对 select、insert、update、delete 的“用户只能读写自己的数据”策略(使用 auth.uid() = user_id,insert/update 使用 with check)。

高级 RLS 模式包括:公开读取、认证用户写入;基于角色的访问(通过 user_roles 表判断 admin);共享访问(所有者或通过 item_shares 表共享给当前用户)。

匿名/访客访问:允许匿名读取已发布内容(to anon),允许匿名插入(用于访客模式)。

客户端集成

提供 Next.js 环境下的客户端初始化示例:使用 @supabase/ssr 的 createBrowserClient 创建浏览器客户端,使用 createServerClient 配合 next/headers 的 cookies 创建服务端客户端。

CRUD 操作示例:查询(select、eq、order、limit)、插入(insert、select、single)、更新(update、eq、select、single)、删除(delete、eq),以及复杂关联查询(嵌套 comments 与 user 的 email)。

实时订阅

提供订阅变更的示例:通过 supabase.channel 创建频道,使用 postgres_changes 监听事件(event: '*'、schema、table、filter),在回调中处理 payload,并通过 channel.unsubscribe() 清理。

身份认证

邮箱/密码认证:signUp(可带 options.data 附加显示名)、signInWithPassword、signOut、getUser。

OAuth 提供商:以 Google 为例的 signInWithOAuth(含 redirectTo),以及回调路由中 exchangeCodeForSession 的处理示例。

认证中间件:提供 middleware.ts 示例,使用 createServerClient 处理 cookies 的 get/set/remove,通过 getUser 判断用户,未认证访问 /dashboard 时重定向到 /login,并配置 matcher。

Edge Functions

提供基础 Edge Function 示例:使用 Deno 的 serve 与 @supabase/supabase-js 创建客户端(关闭 autoRefreshToken 与 persistSession),从 Authorization 头提取 token 并调用 getUser 校验,未授权返回 401,随后执行查询并返回 JSON,包含错误处理返回 500。

类型生成

提供命令:npx supabase gen types typescript --project-id your-project-id > types/supabase.ts,并展示如何在代码中使用 Database 类型派生出 Row、Insert、Update 类型。

常见模式

软删除:添加 deleted_at 列,创建 RLS 策略过滤已删除项,并提供 soft_delete_item 函数(security definer)。

审计日志:创建 audit_logs 表(含 user_id、table_name、record_id、action、changes jsonb),并提供 audit_trigger 触发器函数,使用 auth.uid()、TG_TABLE_NAME、TG_OP 与 to_jsonb 差异记录变更。

故障排查

常见问题:401 错误(检查 RLS 策略、确保用户已认证)、403 错误(RLS 策略阻止操作)、行未找到(策略可能将其过滤)、连接问题(检查 URL 与 API key)、类型不匹配(schema 变更后重新生成类型)。

调试 RLS:通过 set request.jwt.claims 模拟特定用户;查询 pg_policies 查看适用策略;临时禁用 RLS(仅用于测试)。

最佳实践清单

对所有含用户数据的表启用 RLS;为外键和频繁查询列创建索引;主键使用 UUID;添加 created_at 与 updated_at 时间戳;对重要数据实现软删除;对类枚举字段使用 check 约束;生成并使用 TypeScript 类型;充分测试 RLS 策略;service role key 仅服务端使用;实现正确的错误处理;为敏感操作添加审计日志;多步操作使用事务。

使用方式

本技能以文档与代码示例形式提供,涵盖上述各主题的 SQL、TypeScript 与 Deno 代码片段。使用时按需参考对应章节的示例,并结合自身项目调整。

适用场景

设计数据库 schema、创建或调试 RLS 策略、设置认证、构建 Edge Functions、实现实时功能、排查 Supabase 问题、优化数据库查询、设置类型生成。

限制

资料未提供本技能的安装方式、收费模式、支持平台或效果保证等信息,暂未提供。