【发布时间】:2017-11-28 14:02:34
【问题描述】:
我在我的 firebase 项目上设置了以下 firestore 规则
service cloud.firestore {
match /databases/{database}/documents {
match /news/{news} {
allow read: if true;
allow write: if request.auth != null
// && (
// (resource == null && request.resource.data.author == request.auth.uid) ||
// request.auth.uid == resource.data.author == request.resource.data.author ||
// get(/users/$(request.auth.uid)).role in ["editor", "admin"]
// )
&& request.resource.data.keys().hasAll(['title', 'body', 'images', 'tags', 'source', 'web_link', 'created_at', 'updated_at', 'author'])
&& request.resource.data.title is string && request.resource.data.title.size() >= 10 && request.resource.data.title.size() <= 100
&& request.resource.data.body is string && request.resource.data.body.size() >= 300 && request.resource.data.body.size() <= 500
&& request.resource.data.images is list && request.resource.data.images.size() >= 0
&& request.resource.data.tags is list && request.resource.data.tags.size() >= 0
&& request.resource.data.source is string && request.resource.data.source.size() > 0 && request.resource.data.title.size() <= 100
&& request.resource.data.web_link is string && request.resource.data.web_link.size() > 0
// && request.resource.data.created_at is timestamp
// && request.resource.data.updated_at is timestamp
;
}
match /users/{userId} {
allow read, write: if request.auth.uid == userId || get(/users/$(request.auth.uid)).role == "admin"
}
match /{document=**} {
allow read, write: if false;
}
}
}
上面注释的行不起作用
- 我需要检查资源是否正在插入或更新,
resource == null部分不起作用 -
created_at和updated_at包含时间戳,而is timestamp不起作用
如果有人想知道,resource.data.author 包含用户的uid
【问题讨论】:
标签: firebase firebase-security google-cloud-firestore