Firebase 云Firestore安全规则-访问对象数组中的属性
是否可以访问对象数组中包含的文档属性值 我一直在研究一个优秀的应用程序,其中使用文档密钥来满足访问要求。下面是一个例子: 简单用户文档Firebase 云Firestore安全规则-访问对象数组中的属性,firebase,google-cloud-firestore,firebase-security,Firebase,Google Cloud Firestore,Firebase Security,是否可以访问对象数组中包含的文档属性值 我一直在研究一个优秀的应用程序,其中使用文档密钥来满足访问要求。下面是一个例子: 简单用户文档 name: 'a user', roles: { admin: true, editor: true } name: 'a user', roles:[ { feature: 'feature 1', role: 'admin' }, { feature: 'feature 2', role: 'editor
name: 'a user',
roles: {
admin: true,
editor: true
}
name: 'a user',
roles:[
{
feature: 'feature 1',
role: 'admin'
},
{
feature: 'feature 2',
role: 'editor'
}
]
安全规则
service cloud.firestore {
match /databases/{database}/documents {
function getUserData() {
return get(/databases/$(database)/documents/accounts/$(request.auth.uid)).data
}
function userHasRole(role) {
return getUserData().roles[role] == true;
}
match /<some_path>/ {
allow read, write: if userHasRole(editor);
}
}
}
如果我的用户文档的结构是这样的,那么是否可以在安全规则中访问给定功能的“角色”值 我认为你构建角色的方式与你期望的结果背道而驰。您确实希望用户文档上的
roles
字段按用户可能拥有的所有角色的键名进行索引,这与您展示的第一个示例更为相似,这使得查找用户是否拥有角色变得容易
按照现在的方式,规则必须能够1)迭代所有角色,然后2)检查每个迭代对象是否有一个与所需匹配的
role
字段值。安全规则不够灵活,无法表达这种逻辑。我认为您构建角色的方式不符合您的预期结果。您确实希望用户文档上的roles
字段按用户可能拥有的所有角色的键名进行索引,这与您展示的第一个示例更为相似,这使得查找用户是否拥有角色变得容易
按照现在的方式,规则必须能够1)迭代所有角色,然后2)检查每个迭代对象是否有一个与所需匹配的role
字段值。安全规则不够灵活,无法表达这种逻辑