用途:为所有数据库操作强制实施行级安全(RLS)模式,在数据库层面确保数据隔离,防止跨用户访问数据。适用于编写 ORM 或原始 SQL 查询、创建或修改访问数据库的 API 路由、实现写入数据库的 webhook 处理器、处理用户数据/支付/订阅/报名,以及访问仅管理员可用的表。
主要能力:禁止直接调用数据库(如 db.user.findUnique、db.payments.findMany 等会绕过 RLS 的写法),linting 会阻止此类直接调用。改为从配置的导入路径引入 withUserContext、withAdminContext、withSystemContext 三个上下文辅助函数:withUserContext(db, userId, callback) 用于所有面向用户的操作(个人资料、支付历史、订阅、报名等个人数据);withAdminContext(db, userId, callback) 用于仅管理员的操作(查看全部 webhook 事件、管理争议、访问支付失败记录);withSystemContext(db, contextType, callback) 用于 webhook 与后台任务等系统发起的操作。
使用方式:在 Next.js 等框架中,使用 RLS 查询的管理员页面必须设置 export const dynamic = "force-dynamic",因为构建时无法获得 RLS 上下文,否则可能触发“permission denied”。受保护表分为两类:用户数据表(user、payments、subscriptions、invoices,用户隔离,仅可访问自己的数据)与管理员/系统表(webhook_events 为管理员+系统,disputes、payment_failures 仅管理员)。测试须使用应用级数据库角色而非超级用户,命令为 {{RLS_TEST_COMMAND}} 和 {{RLS_VALIDATION_COMMAND}}。
限制:本技能为模板,使用 {{PLACEHOLDER}} 占位符,需替换为项目实际值;权威参考包括 RLS_IMPLEMENTATION_GUIDE.md、RLS_POLICY_CATALOG.md、RLS_DATABASE_MIGRATION_SOP.md 与 linting 规则。资料未提供具体收费标准、支持的数据库类型或平台细节。