如何配置Firestore规则,让用户仅能访问以其UID命名的集合?
Firestore安全规则配置:限制用户仅访问匹配自身UID的集合
当前可实现的规则配置
你可以通过Firestore规则的字符串处理能力,解析集合名称中的UID并与当前认证用户的UID做对比,实现所需的权限控制。以下是具体的规则示例:
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { // 匹配所有以friends_开头的集合及其下所有文档 match /{coll}/{document=**} { allow read, write: if // 确保用户已完成身份认证 request.auth != null // 校验集合名称格式为friends_UID格式 && coll.matches('^friends_([a-zA-Z0-9_-]+)$') // 提取集合名称中的UID,与当前用户UID对比 && coll.split('_')[1] == request.auth.uid; } } }
规则说明
coll.matches('^friends_([a-zA-Z0-9_-]+)$'):用正则约束集合名称必须以friends_开头,后面跟随合法格式的UID(适配Firebase UID的字符范围)。coll.split('_')[1]:将集合名称按下划线分割,提取出后面的UID部分,与request.auth.uid(当前认证用户的UID)做一致性校验。request.auth != null:确保只有已登录的用户才能进行读写操作。
关于可行性的说明
当前这种权限控制是完全可以实现的,所谓“无法实现”的评论可能是对Firestore规则的字符串处理能力不了解导致的误解。
从Firestore的发展趋势来看,规则系统只会持续优化和增强灵活性,这类基于资源名称的权限匹配逻辑不仅现在稳定可用,未来也会继续得到支持,甚至可能出现更简洁的语法来简化这类场景的配置。
内容的提问来源于stack exchange,提问作者whatwhatwhat
相关产品推荐
相关产品推荐

