我的firebase规则中有多个条件,并且想通过在return语句中使用if语句来访问当前用户的数据库。当我单独访问它时,它可以工作,但是当我使用if语句时,我没有得到数据,但有权限错误问题。
我尝试访问它,但是一直失败。
我的规则:
"query.orderByChild == 'userId' && query.equalTo == auth.uid ||
root.child('admins').child(auth.uid).child('role').val() === 'admin'"
访问数据:
let db = firebase.database().ref(`/items`).orderByChild('userId').equalTo(currentUser.uid)
if(firebase.database().ref('/admins').child(currentUser.uid).child('role').equalTo('admin')) {
db = firebase.database().ref(`/items`)
}
db
.once('value')
.then(snapshot => {
let doc = []
const data = snapshot.val();
for (let key in data) {
doc.push({
...data[key],
key: key
});
}
理想情况下,我想使用OR规则,并使用if / else语句根据用户返回数据。
答案 0 :(得分:0)
此语句不执行您认为的操作:
if(firebase.database().ref('/admins').child(currentUser.uid).child('role').equalTo('admin'))
此行中的任何内容都不会从数据库中读取,equalTo
仅构建查询,它实际上不执行任何检查。
如果要检查用户是否是管理员:
let userRoleRef = firebase.database().ref('/admins').child(currentUser.uid).child('role');
userRoleRef.once('value').then((snapshot) => {
if ('admin' == snapshot.val()) {
db = firebase.database().ref(`/items`)
... continue using db here
}
}