3

我刚刚开始使用Firebase,并且能够读取/写入/编辑/删除数据库。在我的应用程序中,我只向用户显示数据,如果他/她有权访问它。存储的Firebase安全规则

我通过创建用户节点和另一个节点(称为服务)并引用该用户子节点中的服务来实现这一点。

我以前从未使用过Firebase的安全规则,现在我想开始使用Firebase存储进行映像。

我下面的教程和我的控制台说,

权限被拒绝。无法通过访问火力地堡控制台存储 标签访问桶.. 请启用火力地堡存储为你的水桶,并确保你有足够的 权限正确配置资源

在谷歌搜索,并就如何SO上搜索设置这些安全规则我不知道什么是正确的答案。一些答案建议我在我的代码中编写方法来授予权限,但文档建议我需要在Firebase的末尾执行此操作。

这是一个例子

// Grants a user access to a node matching their user ID 
service firebase.storage { 
    match /b/<your-firebase-storage-bucket>/o { 
    // Files look like: "user/<UID>/path/to/file.txt" 
    match /user/{userId}/{allPaths=**} { 
     allow read, write: if request.auth.uid == userId; 
    } 
    } 
} 

我不能让人民感觉回答

赞一个从几个月前

{ 
    "rules": { 
    "UsersDB": { 
     "$uid": { 
     ".read": "auth.uid == $uid", 
     ".write": "auth.uid == $uid" 
     } 
    } 
    } 
} 

有人可以请的解释目前的Firebase(和iOS Swift ..如果它很重要)如何使用户1只能读/写他/她的数据/照片

回答

5

你需要一个相应的文件路径结构:

例如,当您上载的文件存储这样的:

(root…) /user/uidxxx/myfile.jpg

其中“uidxxx”是在您的身份验证定义的唯一的用户ID数据库。

然后你就可以编写规则控制台/存储/规则选项卡上:

// Grants a user access to a node matching their user ID 
service firebase.storage { 
    match /b/<your-firebase-storage-bucket>/o { 
    // Files look like: "user/<UID>/path/to/file.txt" 
    match /user/{userId}/{allPaths=**} { 
     allow read, write: if request.auth.uid == userId; 
    } 
    } 
} 

{userId}是将由相应的“uidxxx”

+0

OK更换一个通配符,所以我的问题,然后我猜猜是...存储和数据库是分开的吗?...所以我需要重新创建我的存储结构 – RubberDucky4444

+0

是的,你可以根据需要定义文件结构,但技巧是匹配文件路径和数据库和安全信息(如userId或ie的一些文件夹名称) – toofoo