reactjs - 无法使用安全规则读取所有数据
问题描述
我正在尝试以具有管理节点的用户身份读取所有事件节点,并且如果不是管理员,则只能读取相关事件。我无法使用此安全规则获取所有事件的问题。
"Event":{
"$uid": {
".read": "auth.uid == $uid || root.child('Users').child(auth.uid).child('admin').val() == 'admin'",
".write": true
}
我的请求如下所示:
var starCountRef = firebase.database().ref("Event/"); //trying to read all events as admin
starCountRef.on("value", (snapshot) => {
const data = snapshot.val();
解决方案
我们在这里遇到的问题是 RTDB 规则是自上而下工作的。这意味着,如果顶部的一条规则拒绝访问,则下方的一条规则并不重要。在您的情况下,向管理员授予对整个列表的访问权限是没有问题的,但是对于事件的每个所有者来说也是如此。因为那些可能没有管理员。并且只有.read
将uid放在上面才能访问整个列表。
我可以想象有一种方法可以让它发挥作用。有query-based
规则。更多关于他们在这里。
你可以这样写你的规则:
"Event":{
".read": "query.equalTo == auth.uid ||
root.child('Users').child(auth.uid).child('admin').val() == 'admin'"
}
然后,您需要使用查询访问数据以获取它:
db.ref("Event").orderByKey()
.equalTo(auth.currentUser.uid)
.on("value", cb)
推荐阅读
- asp.net - AWS RDS 的间歇性 SQL 连接问题
- django - 哪些表、触发器、视图受 PostgreSQL 中的删除列级联影响
- angular - Angular LoadingService 策略引发表达式更改错误
- javascript - React Native post请求在显示数组时导致无限循环
- embedded-linux - 我如何将 uClibc 用于 C 库?系统初始化的busybox?和我的 Yocto Linux 映像的 Thumb-2 说明
- maven - 如何使用 infinispan 依赖解决 ivy 中的依赖问题?
- excel - 当用户单击用户窗体上的 X 按钮时如何退出循环?
- php - 如何使用 oauth 2.0 为其他人提供使用我的服务登录的便利
- javascript - 在Angular + Nativescript中将项目添加到数据库时刷新列表视图项目
- java - jOOQ - 重用 SelectConditionStep