我正在开发一个简单的应用程序,可以上传照片。我使用firebase firestore和存储。每次我上传一张新照片,我都会创建一个这样的对象:
struct Item: Codable, Identifiable {
var id: UUID // photo name
var uidOwner: String // uid user owner
var emailOwner: String // email user owner
var path: String // photo path
var shared: [String] = []
}
字符串
我遇到了firestore的规则,允许每个用户只查看他们上传的照片。
目前firestore上的路径如下:
x1c 0d1x的数据
现在我只是使用这个规则,它只检查用户是否登录,但在firestorm playground中它可以工作,在Xcode中我认为资源数据uidOwner为null,因为我没有访问.
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /photos/{photo} {
allow read: if resource.data.uidOwner == request.auth.uid;
}
}
型
你能告诉我我应该使用什么规则来允许每个用户只访问他们自己的数据吗?谢谢!!
编辑1:
这里我的请求在iOS设备:
func downloadImagesName(){
self.isLoading = true
self.itemsPhoto = []
// Reference
let imagesCollectionRef = db.collection("photos")
imagesCollectionRef.getDocuments(completion: { snapshot, error in
if let error = error {
print("Errore durante il recupero dei documenti: \(error.localizedDescription)")
self.isLoading = false
return
}
snapshot?.documents.forEach { doc in
do {
let item = try doc.data(as: Item.self)
self.itemsPhoto.append(item)
if doc == snapshot?.documents.last {
self.isLoading = false
}
} catch {
print("Errore durante la conversione dei dati: \(error.localizedDescription)")
self.isLoading = false
}
}
self.isLoading = false
})
}
型
1条答案
按热度按时间xnifntxz1#
您的查询与规则不匹配。规则不是筛选器。
查询说它想要照片集合中的所有文档,但规则说这是不允许的。规则不会选择性地从查询中排除文档。规则要求在查询中使用
uidOwner
字段作为过滤器,其中的值只能是用户的UID。您必须将此筛选器添加到查询中才能使其工作。