我正在尝试设置安全规则,以便从反应原生项目访问我的Firebase数据库。我目前有一个根路径one
,其中包含推送的任务项。每个任务都有3个子节点,重要的一个是用户创建任务时用用户ID填充的uid字段。以下是位于ModuleFinder finder = ModuleFinder.of(Paths.get("/path/to/module/in/out/production/")); // this is generally a path where I build my modules to
ModuleLayer parent = ModuleLayer.boot();
Configuration cf = parent.configuration()
.resolve(finder, ModuleFinder.of(), Set.of("one")); // name of module in module-info
ClassLoader scl = ClassLoader.getSystemClassLoader();
ModuleLayer layer = parent.defineModulesWithManyLoaders(cf, scl);
layer.modules()
.stream()
.map(Module::getDescriptor) // get the descriptor of module
.map(ModuleDescriptor::requires) // set of requires in the module dependencies
.forEach(System.out::println);
的示例任务:
tasks/
我正在尝试使用安全规则来限制对任何任务的读/写访问,只允许用户使用自己的UID创建任务,并读取/查询与他们匹配的任务。
以下是关于数据库任务部分的安全规则:
tasks/randomtaskid
安全规则模拟器说这确实成功地限制了访问 - 当我尝试读取/写入与它阻止访问的uid不匹配的任务时它会在匹配时允许它,但是当我尝试时为了从我的应用程序中访问任务,我得到一个权限被拒绝的错误(一旦我回到允许所有经过身份验证的用户对{
"date" : "2017-12-11",
"ttRef" : "irrelevant",
"uid" : "DrL3j1cWVehas45ghmeQ"
}
的读/写访问权限就会消失)。为什么他们会有所不同,我该怎么做才能修复我的规则?谢谢!
编辑:导致错误的代码示例:
"tasks": {
".indexOn": ["uid", "date"],
"$task": {
".validate": "newData.hasChildren(['date', 'ttRef', 'uid'])",
".write": "auth != null && newData.child('uid').val() == auth.uid",
".read": "auth != null && data.child('uid').val() == auth.uid",
},
},