所有权机制
在 Supabase Storage 中创建新存储桶或对象时,系统会自动为其分配所有者。所有者是创建该资源的用户,其值来源于 JWT 中的 sub
声明。
我们将 owner
存储在 owner_id
列中。
当使用 service_key
创建资源时,不会设置所有者,该资源将属于任何人。通过仪表板创建 Storage 资源时也是如此。
Storage 模式有两个表示所有权的字段:owner
和 owner_id
。owner
已弃用并将被移除,请改用 owner_id
。
访问控制
资源所有权本身并不提供任何访问控制。但您可以通过针对存储资源实施范围限定到其所有者的访问控制来强制执行所有权。
例如,您可以实现一个策略,规定只有对象的所有者才能删除它。为此,需要检查对象的 owner_id
字段并与 JWT 的 sub
声明进行比较:
1234567create policy "用户可删除自己的对象"on storage.objectsfor deleteto authenticatedusing ( owner_id = (select auth.uid()));
RLS 策略只是实施访问控制的一种方式。您也可以按照相同的模式在服务器代码中实现访问控制。