用途:为 Supabase 应用实现自定义 RBAC,突破内置 anon/authenticated 角色限制,适用于多角色(admin/editor/viewer/member)、组织级多租户隔离和按角色限定 API 操作的场景。
主要能力:一是通过 Admin API 的 supabase.auth.admin.updateUserById() 把 role 与 org_id 写入用户 app_metadata,使其出现在 JWT 中;二是用 SQL 辅助函数 get_user_role()、get_user_org_id() 读取 auth.jwt() -> 'app_metadata' ->> 'role',并在 RLS 策略中按 SELECT/INSERT/UPDATE/DELETE 分别做角色与 org_id 双重校验;三是在应用层用 withRole() 中间件再次校验,返回 401/403;四是提供 hasRole() 角色层级比较、管理面板操作(列出成员、邀请用户、改角色)等模式。
使用方式:需 @supabase/supabase-js v2+ 与服务角色密钥,理解 JWT claims 与 auth.jwt(),并能通过 SQL Editor 或 psql 创建 RLS 策略。流程为分配角色、RLS 强制、应用层强制三步。
限制与注意:app_metadata.role 为空通常因未设置或需重新登录;角色变更后需 refreshSession() 或重新登录才生效;辅助函数需在 public schema 以 SECURITY DEFINER 创建;服务角色密钥会绕过 RLS,仅限服务端管理操作;插入 team_members 前需检查重复与用户/组织是否存在。具体价格、平台支持等资料暂未提供。