我有要确保安全的文件,一旦管理员将文件上传到存储中,只有他和与之共享文件的用户才能访问下载该文件的链接。因此,根据Firestore规则,我添加了以下内容:
match /users/{userID} {
allow read: if isOwner(userID) || isAdmin();
allow write: if isOwner(userID) || isAdmin();
}
/// FUNCTIONS BELLOW ///
function isAdmin() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.IsAdmin;
}
但是,当我尝试在Firestorage下添加相同的规则时,访问会不断被拒绝。
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read: if isAdmin();
allow write: if isAdmin();
}
/// FUNCTIONS BELLOW ///
function isAdmin() {
return get(/databases/$(database)/documents/users/$(request.auth.uid)).data.IsAdmin;
}
}
}
Firestorage get方法和Firestore get方法的工作方式不同吗? 任何帮助将不胜感激。
答案 0 :(得分:1)
没有(CComplex,int)
,实际上有 Cloud Firestore (这是Google的新数据库), Firebase Storage (用于存储图像)的规则,音频,视频或其他用户生成的内容以及 Fireabse实时数据库,它也是NoSQL数据库。
安全规则以简单但具有表现力的格式提供访问控制和数据验证。
存储安全性规则用于确定谁对存储在Cloud Storage中的文件具有读写访问权,以及文件的结构方式和包含的元数据。
Firebase实时数据库规则确定谁拥有对数据库的读写访问权限,数据的结构方式以及存在的索引。这些规则位于Firebase服务器上,并始终自动执行。
答案 1 :(得分:0)
我猜您是在谈论Firebase Cloud Storage和Firestore
云存储规则的问题是您无法访问Firestore数据库。如果您需要保留数据以帮助授权写操作,则可以查看custom claims,您可以在安全规则中使用auth.token.admin === true
进行访问,例如,查看管理属性的用户auth令牌< / p>
service firebase.storage {
match /b/{bucket}/o {
match /{allPaths=**} {
allow read: if isAdmin();
allow write: if isAdmin();
}
/// FUNCTIONS BELLOW ///
function isAdmin() {
return auth.token.admin === true
}
}
}