Firestore规则配置求助:父文档字段校验与子集合权限管控
Firestore 规则配置方案
以下是满足你需求的完整Firestore规则,重点解决子集合与父文档的权限关联问题:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 父文档 releases 的规则(包含uid不可修改约束) match /releases/{releaseId} { allow read: if request.auth != null; allow create: if request.auth != null && request.resource.data.uid == request.auth.uid; allow update: if request.auth != null && resource.data.uid == request.auth.uid && request.resource.data.uid == resource.data.uid; // 强制uid字段创建后不可修改 allow delete: if request.auth != null && resource.data.uid == request.auth.uid; // 子集合 covers 的权限规则 match /covers/{coverId} { allow read: if request.auth != null; // 仅父文档所有者可执行写/删操作 allow create, update, delete: if request.auth != null && get(/databases/$(database)/documents/releases/$(releaseId)).data.uid == request.auth.uid; } // 子集合 tracks 的权限规则 match /tracks/{trackId} { allow read: if request.auth != null; // 复用父文档所有者校验逻辑 allow create, update, delete: if request.auth != null && get(/databases/$(database)/documents/releases/$(releaseId)).data.uid == request.auth.uid; } } } }
关键规则说明
- 父文档uid不可修改:在
update规则中增加request.resource.data.uid == resource.data.uid约束,确保任何修改操作都无法改动uid字段。 - 子集合权限关联父文档:通过
get()方法读取对应父releases文档的uid字段,与当前登录用户的request.auth.uid匹配,实现仅所有者操作子集合的需求。 - 全局读权限:所有已登录用户(
request.auth != null)均可读取releases集合及其子集合的内容。
内容的提问来源于stack exchange,提问作者s1curepwnd
相关产品推荐
相关产品推荐

