leo*_*rdo 2 firebase firebase-authentication firebase-realtime-database google-cloud-firestore
我想保证用户只能添加与其auth.uid具有相同ID的文档.
例如,ID为1X0T6xC6hhRN5H02zLCN6SQtwby2的用户只能创建/更新文档/ salesmen/1X0T6xC6hhRN5H02zLCN6SQtwby2.
在应用程序级别,它由以下命令完成(包括创建和更新).
this.db
.collection("salesmen")
.doc(user.uid)
.set(data)
.then(function() { //...
Run Code Online (Sandbox Code Playgroud)
在Firestore级别,我正在尝试以下规则,但它不起作用(导致错误写入文档:错误:缺少权限或权限不足.).
match /salesmen/{salesman} {
allow read: if true;
allow write: if request.auth != null && resource.id == request.auth.uid;
}
Run Code Online (Sandbox Code Playgroud)
如何执行这条规则?
resource.id只能用于引用Firestore中的现有文档.如果正在编写的文档尚不存在,则它不起作用.
相反,您可以salesman在匹配表达式中使用通配符来确定用户是否可以编写特定文档,即使它尚不存在:
match /salesmen/{salesman} {
allow read: if true;
allow write: if request.auth != null && salesman == request.auth.uid;
}
Run Code Online (Sandbox Code Playgroud)
看起来您也可以使用它request.resource.id来引用可能尚未编写的文档的id:
match /salesmen/{salesman} {
allow read: if true;
allow write: if request.auth != null && request.resource.id == request.auth.uid;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
726 次 |
| 最近记录: |