Firebase firestore规则中的Access数据库引用
我正在努力访问firestore规则中的文档引用。我的数据库看起来像这样。(为简洁起见简化): 我试过很多方法,但似乎都解决不了 提前谢谢 编辑 在下面添加了收藏的截图 将角色显示为角色集合中角色文档的文档引用的用户集合。 角色集合Firebase firestore规则中的Access数据库引用,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,我正在努力访问firestore规则中的文档引用。我的数据库看起来像这样。(为简洁起见简化): 我试过很多方法,但似乎都解决不了 提前谢谢 编辑 在下面添加了收藏的截图 将角色显示为角色集合中角色文档的文档引用的用户集合。 角色集合 我可以在您的规则中看到两个问题: get需要完整的文档路径,因此您的函数getUserRole无法工作。请尝试以下方法: function getUserRole() { let role = getUser().data.role; return get
我可以在您的规则中看到两个问题:
get
需要完整的文档路径,因此您的函数getUserRole
无法工作。请尝试以下方法:
function getUserRole() {
let role = getUser().data.role;
return get(path("/databases/" + database + "/documents/" + role));
}
canEditContent
,但您显示的数据使用editContent
,这是故意的吗
如前所述,请提供完整的数据、查询和规则集,在这里我们看不到您使用的查询。还请注意,您可以使用Firestore emulator获取关于哪些规则失败以及失败位置的信息。而不必查看数据库中的所有实际数据,也不必查看应拒绝或允许查询的客户机代码,这里的内容只是理论上的。没有数据和客户端代码,规则就没有任何意义。还可以考虑,本地模拟器是调试客户端代码和测试数据的一种更有效的方式。我已经添加了@DougStevenson的屏幕截图,我将看看本地模拟器。谢谢还请显示这些规则允许或拒绝的客户端查询代码。我们需要能够看到在查询时所有这些数据是如何联系在一起的。具体的值在这里非常重要,包括数据和查询。但据我所知,文档引用包括完整路径?
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
function isSignedIn() {
return request.auth != null;
}
function getUser() {
return get(/databases/$(database)/documents/users/$(request.auth.uid));
}
function getUserRole() {
let role = get(/databases/$(database)/documents/users/$(request.auth.uid)).data.role;
return get(role);
}
match /curriculum/{curriculum} {
allow write: if isSignedIn() && getUserRole().data.canEditContent;
}
match /users/{userId} {
allow read, update, delete, write: if request.auth != null && request.auth.uid == userId;
allow create: if request.auth != null;
}
}
}
function getUserRole() {
let role = getUser().data.role;
return get(path("/databases/" + database + "/documents/" + role));
}