用途:这是面向 Supabase 数据库操作的关键护栏,旨在防止多租户数据泄漏,并统一数据库访问规范。当编写 Supabase 查询(supabaseAdmin.from())、访问租户级数据表、创建带数据库访问的 API 路由,或处理活动、文章、RSS 数据时适用。
主要能力与规则:
- 租户级表的所有查询必须包含 publication_id 过滤,例如 .eq('publication_id', newsletterId);涉及的表包括 newsletter_campaigns、articles、secondary_articles、rss_posts、post_ratings、rss_feeds、app_settings、advertisements、campaign_advertisements、archived_articles、archived_rss_posts。newsletters 等顶级或系统级表不需要。
- 服务端操作使用 supabaseAdmin,禁止在客户端组件('use client')或浏览器代码中暴露 service role key。可用于 API 路由、Server Actions、Server Components、后台任务与工作流步骤。
- 避免 SELECT *,只选择需要的字段,除非确实需要全部列。
- 始终检查 error,并处理 data 为 null 的情况,避免直接访问属性导致崩溃。
使用方式:提供标准查询、写入、更新、删除与关联查询的代码模式,包括使用 .single() 或记录可能不存在时用 .maybeSingle(),并对更新、删除操作同样附加 publication_id 过滤以防越权。错误日志建议使用 [DB] 前缀。
适用场景:多租户新闻通讯或内容平台的数据库访问层、API 与后台任务开发。
限制:资料仅描述该技能的规则与代码模式,未提供独立安装命令、定价、许可或额外平台支持信息,这些暂未提供。错误恢复仅覆盖“Row level security policy violated”和“column does not exist”两类提示的排查方向。