【发布时间】:2017-05-11 21:53:00
【问题描述】:
我想让用户按值查找记录,但我不希望他们能够列出所有记录。
例如,我想创建一个 wiki,并且我希望某些页面只能通过直接 url 访问。
我知道我可以在记录级别授予读取权限,并且用户将无法读取所有键,但是我仅限于键允许的字符,而我可能想使用 @987654321 @ 和其他字符。
所以我会将事物的路径存储在它的 path 属性中,然后通过 path 查找该事物;
// database structure
things
-KNi4OQXGXsHKYHVuTln
path: "should/not/be/listed/anywhere"
我想让用户只有在知道路径的情况下才能找到东西。
问题是我只能通过搜索/things 和orderByChild 和equalTo 找到这个东西:
// request with javascript
firebase.database()
.ref('/things').orderByChild('path')
.equalTo("should/not/be/listed/anywhere")
.once('value', s=>{ });
这意味着我必须授予/things 的读取权限:
// database security rules
{
"rules": {
"things": {
".read": true,
".indexOn": ["path"],
"$thingId": {
".validate": "newData.hasChildren(['path']) && newData.child('path').isString()"
}
}
}
}
这有效地让任何人都能看到我拥有的所有东西。有没有办法避免这种情况?
如果不是,这是否意味着一旦我想通过属性值查找,Firebase 是否会强制我公开所有内容?
【问题讨论】:
标签: firebase firebase-realtime-database firebase-security