自定义角色
了解如何使用自定义角色与存储 Schema
在本指南中,你将学习如何创建和使用自定义角色与 Storage,以管理对对象和 Bucket 的基于角色的访问控制。同样的方法可用于使用自定义角色与任何其他 Supabase 服务。
Supabase Storage 使用与任何其他使用 RLS(行级别安全)的 Supabase 服务相同的基于角色的访问控制系统。
创建自定义角色#
让我们创建一个名为 manager 的自定义角色,以提供对特定 Bucket 的完全读取访问权限。对于更高级的设置,请参阅 RBAC 指南。
1create role 'manager';23-- Important to grant the role to the authenticator and anon role4grant manager to authenticator;5grant anon to manager;创建策略#
让我们创建一个策略,为 manager 角色提供对 Bucket teams 中所有对象的完全读取权限。
1create policy "Manager can view all files in the bucket 'teams'"2on storage.objects3for select4to manager5using (6 bucket_id = 'teams'7);测试策略#
要模拟 manager 角色,你需要一个带有 manager 角色的有效 JWT 令牌。你可以使用 Node.js 中的 jsonwebtoken 库快速创建一个。
签署新的 JWT 需要你的 JWT_SECRET。你必须安全地存储此密钥。切勿在前端代码中暴露它,也不要将其签入版本控制。
1const = ('jsonwebtoken')23const = 'your-jwt-secret' // You can find this in your Supabase project settings under API. Store this securely.4const = '' // the user id that we want to give the manager role56const = .({ : 'manager', : }, , {7 : '1h',8})现在你可以使用此令牌访问 Storage API。
1const { StorageClient } = require('@supabase/storage-js')23const PROJECT_URL = 'https://your-project-id.supabase.co/storage/v1'45const storage = new StorageClient(PROJECT_URL, {6 authorization: `Bearer ${token}`,7})89await storage.from('teams').list()