当前位置: 首页 > 知识库问答 >
问题:

UID列表的Firebase存储自定义元数据安全规则

司寇嘉茂
2023-03-14
    var metadataValues = [String:String]()

    for friendUid in friendsSelected.keys {
        metadataValues.updateValue(friendUid, forKey: friendUid) // how do I access these values in my security rules
    }
    metadataValues.updateValue(senderUid, forKey: "fromUid") // how do I access this in security rules 
    let messageMetadata = FIRStorageMetadata()
    messageMetadata.customMetadata = metadataValues
    match /messages/{messageId} {

        allow read: if request.auth.uid == resource.metadata.request.auth.uid; // I want all friend uids to be able to read file
        allow write: if request.auth.uid == resource.metadata.fromUid; // only the person who create the message can access it

}

作为旁注,我假设添加到CustomMetadata的键数没有限制?

共有1个答案

须捷
2023-03-14

所以我已经设法解决了。我遇到的问题是我不熟悉Javascript,所以我搞错了语法。在研究了Javascript之后,我很快就能理解它。

希望我的回答能对其他人有所帮助,但如果您的处境与我相似,我会推荐您学习Javascript的基础知识。

还值得注意的是,要访问文件元数据,在执行写之前使用request.resource.metadata,在上载之后使用resource.metadata进行访问。

    match /messages/{messageId} {
    
        allow write: if request.resource.metadata['fromUid'] == request.auth.uid; 
        allow read: if resource.metadata[request.auth.uid] == request.auth.uid; 
    } 
 类似资料:
  • 拒绝许可。无法访问存储桶..请访问Firebase控制台中的Storage选项卡,为您的存储桶启用Firebase存储,并确保您有足够的权限来正确提供资源 在谷歌搜索如何设置这些安全规则,我不确定什么是正确的答案。一些答案建议我在代码中编写方法来授予权限,但文档建议我需要在Firebase的端进行。 这是其中一个例子 我无法理解人们的回答 就像几个月前的这张 有人能解释一下当前的Firebase(

  • 当用户上载文件时,这个特定的时间存储在文件元数据中的自定义属性“过期”字段中。 我的问题是,我试图将该值用作函数的参数,如下所示: 但是“duration”函数似乎只接受幅度参数中的常量值,而不接受动态值。 有人也试过吗? 谢谢

  • 所以我想知道,如果我将一个UUID作为后修复添加到文件路径(我现在这样做是为了唯一性,),它是否可以作为一种通过模糊来实现安全的方法呢?(这将是非常困难的野蛮猜测,使某种“私人”文件)。 我知道这不是很理想,但至少在Firebase为这种场景实现更好的解决方案之前,这是暂时的事情,并且能够在晚上睡得更好:p 我的想法是设置如下内容: null

  • 同样,简的照片只对约翰和简可见,而对艾比不可见,而艾比的照片只对艾比可见,对约翰和简都不可见。 是否有一种方法可以交叉引用跨这些Firebase服务定义的条件,从而相应地定义安全规则?

  • null 用Firestore存储创建的bucket与我的域同名,并且bucket权限已设置为“allusers”,角色为“Storage Legacy Object Reader”。我可以访问两个文件:index.html和secret.html而无需任何形式的身份验证(由于我设置了bucket权限)。 如何使index.html的内容对所有用户公开,但secret.html仅限于Firebas

  • 有没有一种方法可以只将数据传递给Firebase,以便在安全规则中进行检查,而实际上不将数据持久化到Firebase DB中?