我有一个如下所示的数据库结构:
Firestore-root
|
--- users (collection)
| |
| --- UidOne (document)
| |
| --- userName: "UserOne"
|
--- items (collection)
|
--- ItemIdOne (document)
| |
| --- itemName: "ItemOne"
|
--- ItemIdTwo
|
--- itemName: "ItemTwo"
我想要实现的是限制每个用户使用安全规则从items
集合中的每个文档中读取项目名称。我就是这样做的:
service cloud.firestore {
match /databases/{database}/documents {
match /items/{item} {
allow read, write: if false;
}
}
}
要显示项目名称,请使用以下查询:
Query query = itemsRef.orderBy("itemName", Query.Direction.ASCENDING);
当我尝试编译我的应用时,我收到以下错误:
com.google.firebase.firestore.FirebaseFirestoreException: PERMISSION_DENIED: Missing or insufficient permissions.
但项目名称仍显示在我的RecyclerView
中。我怎样才能阻止这种情况发生?
答案 0 :(得分:1)
也许检查您的商品是否仍然来自本地缓存。
从this页面添加此内容到您的OnEvent
:: Q:\Test\2018\05\08\SO_50222677.cmd
@Echo off&SetLocal
Set /P "_FileName=FileName :"
Set /P "_Size=Size in pt:"
Set /P "_Color=html color:"
Set /p "_Name=Hello name:"
( Echo:^<html^>^<body^>
Echo:Hello
Echo:^</span^>%_NAME%
Echo:
Echo:^<p ^<span style='font-size:%_Size%pt'^>
Echo:
Echo:^<span style='color:%_Color%'^>
Echo:
Echo:^</span^>^</p^>^</body^>^</html^>"
) > "%_FileName%"
如果从本地缓存读取,您可以像这样设置PersistenceEnabled(false)(也在该页面上提到):
String source = querySnapshot.getMetadata().isFromCache() ?
"local cache" : "server";
Log.d(TAG, "Data fetched from " + source);
即使您在线,它也会从本地快照中读取,并且只有在数据发生变化时才会更新快照。您的规则不会改变您的数据。我发现在测试时设置为true我得到了一些意想不到的结果。我发现在测试和更改代码/规则时我更喜欢它是假的。