swift - Firebase 规则:权限被拒绝
问题描述
我正在尝试限制用户访问某些高级节点,但希望让某些用户能够读取某些子节点。
我的数据结构是这样的:
{
"COMPANIES" : {
"COMPANY1" : {
"id" : "COMPANY1",
"name" : "COMPANY1 COMPANY"
},
"COMPANY2" : {
"id" : "COMPANY2",
"name" : "COMPANY2 COMPANY"
}
},
"USERS" : {
"xZgFtwVyQFsPK3428YCa3NekOEF3" : {
"company" : {
"COMPANY1" : true,
"COMPANY2" : true
},
"email" : "ss@sss.com",
"uid" : "xZgFtwVyQFsPK3428YCa3NekOEF3",
"username" : ""
}
}
}
等等。
我的规则是:
{
"rules": {
"USERS": {
"$uid": {
".read": "auth != null && auth.uid == $uid",
".write": "auth != null && auth.uid == $uid"
}
},
"COMPANIES": {
"COMPANY1": {
".read": "root.child('USERS').child(auth.id).child('company').child('COMPANY1').val() == true",
".write": false
}
}
}
}
我用来访问这些数据的代码如下所示(在 Swift 中):
refFire.child("COMPANIES").child("COMPANY1").observe(DataEventType.value, with: { (dsnap) in
另外,我试过这个:
refFire.child("COMPANIES").queryOrdered(byChild: "COMPANY1").queryEqual(toValue: "COMPANY1").observe(DataEventType.value, with: { (dsnap) in
而这个(不幸的是,我并不真正理解背后的想法queryEqual
,所以我尝试了不同的方法):
refFire.child("COMPANIES").child("COMPANY1").queryOrdered(byChild: "COMPANY1").queryEqual(toValue: "COMPANY1").observe(DataEventType.value, with: { (dsnap) in
因此,我想将 COMPANY1 的访问权限授予COMPANY1 = true
其个人资料中的用户(并拒绝其他所有人)。规则似乎相对简单,但显然我在这里做错了,因为即使用户COMPANY1 = true
无法阅读公司信息,权限也会被拒绝。
解决方案
推荐阅读
- aws-api-gateway - 从 openvpn ip 访问 AWS API
- javascript - Firebase 存储子引用 getDownloadURL 返回“childPath.split 不是函数”
- bash - 从当前 bash 会话中恢复“原始”历史记录
- python - Flask-Login:AttributeError:类型对象'User'没有属性'get'
- python - 将变量分配给整个迭代,同时在 for 循环中执行迭代解包
- android - 如何在没有代码的情况下在 Android 上查看 React Native App 的网络流量
- spring - Kafka 生产者未使用 @RefreshScope 重新创建
- powerbi - CALCULATE 中的过滤器处理顺序
- subdomain - 如何使用正则表达式提取字符串中的域?
- java - 获取用户输入并搜索二维数组并打印结果