使用firestore和angularfire2 RC2。
service cloud.firestore {
match /databases/{database}/documents {
match /collectionA/{userId=**} {
allow read, write: if true;
}
match /collectionB/{userId=**} {
allow read, write: if true;
}
match /collectionC/{userId=**} {
allow read, write: if true;
}
match /collectionD/{userId=**} {
allow read, write: if true;
}
}
}
我想要达到的目的是只允许用户访问他们自己的数据。
我从以下规则开始:
service cloud.firestore {
match /databases/{database}/documents {
match /collectionA/{userId=**} {
allow read, write: if request.auth.uid == userId;
}
match /collectionB/{userId=**} {
allow read, write: if request.auth.uid == userId;
}
match /collectionC/{userId=**} {
allow read, write: if request.auth.uid == userId;
}
match /collectionD/{userId=**} {
allow read, write: if request.auth.uid == userId;
}
}
}
然而,只要我添加任何类型的限制性规则,包括甚至只是验证请求,就被授权了。
match /databases/{database}/documents {
match /collectionA/{userId=**} {
allow read, write: if request.auth;
}
match /collectionB/{userId=**} {
allow read, write: if request.auth;
}
match /collectionC/{userId=**} {
allow read, write: if request.auth;
}
match /collectionD/{userId=**} {
allow read, write: if request.auth;
}
}
const entryCollection: AngularFirestoreCollection<Entry> = this.angularfirestore.collection('collectionC/' + user.uid + '/records' + '/2017-40' + '/entries');
简而言之,{userid=**}
导致userid
是路径
而不是字符串
。这意味着将其与request.auth.uid
(字符串)进行比较将失败。相反,您可能需要以下内容:
service cloud.firestore {
match /databases/{database}/documents {
match /collectionA/{userId}/{allSubcollections=**} {
allow read, write: if request.auth.uid == userId;
}
}
}
这将保证userid
是一个字符串,然后匹配适当的子集合(请再次注意,allsubcollections
将是一个path
)。
我花了最后一天的时间试图做一些关于消防规则的事情,但我似乎找不到任何地方的解决方案。我对这个火炉规则很陌生,所以请耐心:) 我目前有以下规则:
我有一些rest api,如下所示: 我必须如何保护他们?每个用户只能看到她/他的数据,但管理员可以看到所有数据。 怎样 在会话中的每个方法用户ID等于传递给api的user_id参数之前,我是否检查过?有更好的方法吗? 附言:我使用JWT的Spring安全。
任何指导都非常感谢! 谢谢,A。
那么,如何在安全组中添加出口规则,允许通过端口443对ECR URI进行出站访问,而不对所有IP地址开放呢?
我当前的Android应用程序使用Firebase实时数据库。 我正在与安全规则作斗争,因为我希望只允许单个用户写入数据,同时允许任何经过身份验证的用户读取数据。 我制定了这些规则,但不确定它们是否足够安全。。。 其中“XXXXXXXXXXXXXXXXXXXX”是我希望允许写入数据的指定用户。 用户的uid是常量值吗? 在测试新规则时,单击“模拟”按钮时,“验证”选项管理什么?
null 基本上数据结构如下所示: 问题是,我应该写什么安全规则来允许用户只在他们所属的组中(拥有组密钥)读取、创建和更新数据?同时,如何禁止用户找出其他群组的密钥?