关于 supabase-best-practices
supabase-best-practices 是面向使用 Clerk 身份验证的 Supabase 应用开发 skill,提供按优先级组织的安全与性能指南。规则涵盖数据库、API、存储、实时功能和 Edge Functions,并可在独立参考文件中查看示例。
主要功能
- 01覆盖 10 类的优先级规则
- 02Supabase 与 Clerk 集成指南
- 03RLS 策略建议
- 04含代码示例的参考文件
适用场景
- 01保护新的 Supabase 项目
- 02审查 Row Level Security 策略
- 03检查 Clerk 身份验证集成
- 04检查 Edge Functions 与 Storage 设置
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ pedrobarretocw/ supabase-best-practices --skill supabase-best-practices安装后在 Claude Code 中输入/supabase-best-practices确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
references/rules/_sections.md_template.mdapi-filter-queries.mdapi-publishable-keys.mdapi-service-role-server-only.mdauth-app-metadata-authorization.mdauth-jwt-claims-validation.mdauth-session-management.mdauth-user-metadata-safety.mdclerk-client-client-side.mdclerk-client-server-side.mdclerk-mfa-policies.mdclerk-no-jwt-templates.mdclerk-org-policies.mdclerk-role-claim.mdclerk-setup-third-party.mddb-foreign-keys.mddb-indexes-strategy.mddb-migrations-versioned.mddb-schema-design.mddb-triggers-security.mddb-views-security-invoker.mdedge-cors-handling.mdedge-secrets-management.mdedge-verify-jwt.mdrealtime-cleanup-subscriptions.mdrealtime-private-channels.mdrealtime-rls-authorization.mdrls-add-indexes.mdrls-always-enable.md详细介绍
Supabase 最佳实践
为集成 Clerk 身份验证的 Supabase 应用提供全面的安全与性能优化指南。涵盖 10 个类别中的 40 多条规则,并按影响排序,帮助安全地开发和审查代码。
适用场景
在以下情况下参考这些指南:
- 设置新的 Supabase 项目
- 将 Clerk 身份验证集成到 Supabase
- 编写行级安全(RLS)策略
- 设计数据库架构
- 实现实时功能
- 配置 Storage 存储桶
- 编写 Edge Functions
- 审查代码中的安全问题
按优先级划分的规则类别
| 优先级 | 类别 | 影响 | 前缀 |
|---|---|---|---|
| 1 | 行级安全 | CRITICAL | rls- |
| 2 | Clerk 集成 | CRITICAL | clerk- |
| 3 | 数据库安全 | HIGH | db- |
| 4 | 身份验证模式 | HIGH | auth- |
| 5 | API 安全 | HIGH | api- |
| 6 | Storage 安全 | MEDIUM-HIGH | storage- |
| 7 | Realtime 安全 | MEDIUM | realtime- |
| 8 | Edge Functions | MEDIUM | edge- |
| 9 | 测试 | MEDIUM | test- |
| 10 | 安全 | MEDIUM | security- |
快速参考
1. 行级安全(CRITICAL)
rls-always-enable- 始终为 public 架构中的表启用 RLSrls-wrap-functions-select- 使用 (SELECT ...) 包装身份验证函数以提升性能rls-add-indexes- 为 RLS 策略中使用的列添加索引rls-specify-roles- 使用 TO authenticated 子句指定角色rls-security-definer- 对复杂策略使用 SECURITY DEFINER 函数rls-minimize-joins- 尽量减少 RLS 策略中的联接rls-explicit-auth-check- 使用明确的 auth.uid() 检查rls-restrictive-policies- 使用 RESTRICTIVE 策略添加额外限制
2. Clerk 集成(CRITICAL)
clerk-setup-third-party- 使用 Third-Party Auth 集成(而不是 JWT 模板)clerk-client-server-side- 对服务端客户端使用 accessToken 回调clerk-client-client-side- 对客户端使用 useSession() hookclerk-role-claim- 在 Clerk 中配置 role: authenticated 声明clerk-org-policies- 在多租户 RLS 中使用组织声明clerk-mfa-policies- 使用 RESTRICTIVE 策略强制执行 MFAclerk-no-jwt-templates- 切勿使用已弃用的 JWT 模板集成
3. 数据库安全(HIGH)
db-migrations-versioned- 对架构变更使用带版本号的迁移db-schema-design- 遵循正确的架构设计模式db-indexes-strategy- 实施恰当的索引策略db-foreign-keys- 始终使用外键约束db-triggers-security- 妥善保护触发器函数db-views-security-invoker- 对视图使用 SECURITY INVOKER
4. 身份验证模式(HIGH)
auth-jwt-claims-validation- 始终验证 JWT 声明auth-user-metadata-safety- 将 user_metadata 视为不可信数据auth-app-metadata-authorization- 使用 app_metadata 进行授权auth-session-management- 实施恰当的会话管理
5. API 安全(HIGH)
api-filter-queries- 即使启用了 RLS,也始终过滤查询api-publishable-keys- 正确使用 publishable keyapi-service-role-server-only- 切勿向客户端暴露 service role key
6. Storage 安全(MEDIUM-HIGH)
storage-rls-policies- 为 storage.objects 启用 RLSstorage-bucket-security- 配置存储桶级别的安全性storage-signed-urls- 对私有文件使用签名 URL
7. Realtime 安全(MEDIUM)
realtime-private-channels- 对敏感数据使用私有频道realtime-rls-authorization- RLS 策略适用于 Realtimerealtime-cleanup-subscriptions- 卸载时清理订阅
8. Edge Functions(MEDIUM)
edge-verify-jwt- 始终在 Edge Functions 中验证 JWTedge-cors-handling- 正确处理 CORSedge-secrets-management- 对敏感数据使用密钥
9. 测试(中等)
test-pgtap-rls- 使用 pgTAP 测试 RLS 策略test-isolation- 正确隔离测试test-helpers- 使用测试辅助函数
10. 安全(中等)
security-validate-inputs- 在处理前验证所有输入security-audit-advisors- 定期运行 Security Advisor 检查
使用方法
阅读各个规则文件,了解详细说明和代码示例:
references/rules/rls-always-enable.md
references/rules/clerk-setup-third-party.md
references/rules/_sections.md
每个规则文件都包含:
- 简要说明其重要性
- 错误代码示例及说明
- 正确代码示例及说明
- 不适用该模式的情况
- 官方文档的参考链接
完整汇编文档
完整指南(包含所有展开的规则)请参阅:references/supabase-guidelines.md
评论
支持 Markdown