Gal*_*cha 11 firebase firebase-security google-cloud-firestore
Firestore 不能很好地进入函数
\n\n我有这个规则
\n\nservice cloud.firestore {\n match /databases/{database}/documents {\n\n function isProjectOpenForAssign() {\n return get(/databases/$(database)/documents/projects/$(anyProject)).data.canAssignTask == true;\n }\n\n match /projects/{anyProject} {\n allow create: if request.auth != null;\n\n match /tasks/{anyTask} {\n allow create: if request.auth != null && (isProjectOpenForAssign());\n }\n }\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n\n当运行模拟器测试它时我得到:
\n\n\n\n运行模拟时出错 \xe2\x80\x94 错误:simulator.rules 行 [23],列 [14]。函数未找到错误:名称:[get].;错误:提供的调用参数无效。函数:[get],参数:["||invalid_argument||"]
\n
问题出在您定义函数的范围内。由于您isProjectOpenForAssign在与此 match 相同的级别上定义match /projects/{anyProject},因此该函数将无法访问anyProject.
有两种解决方案:
anyProject作为参数传递给isProjectOpenForAssign.
function isProjectOpenForAssign(anyProject) {
return get(/databases/$(database)/documents/projects/$(anyProject)).data.canAssignTask == true;
}
match /projects/{anyProject} {
allow create: if request.auth != null;
match /tasks/{anyTask} {
allow create: if request.auth != null && (isProjectOpenForAssign(anyProject));
}
}
Run Code Online (Sandbox Code Playgroud)在声明 的 match 中定义函数anyProject。
match /projects/{anyProject} {
function isProjectOpenForAssign() {
return get(/databases/$(database)/documents/projects/$(anyProject)).data.canAssignTask == true;
}
allow create: if request.auth != null;
match /tasks/{anyTask} {
allow create: if request.auth != null && (isProjectOpenForAssign());
}
}
Run Code Online (Sandbox Code Playgroud)| 归档时间: |
|
| 查看次数: |
3791 次 |
| 最近记录: |