到目前为止,我一直在使用此规则配置
{
"rules": {
"items": {
".read" : true,
"$uid": {
".read" : true,
".write": "auth != null && auth.uid == $uid"
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
验证和其他目录被省略。/ items / user1 / item1 / items / user2 / item1
全部可以读取项目目录和所有用户项目(无私有项目)
我需要什么?
平面项目
"items" : {
"item1": {},
"item2": {}
}
Run Code Online (Sandbox Code Playgroud)
以userId作为属性
"item1" : {
"uid": "userId"
}
Run Code Online (Sandbox Code Playgroud)
只有用户创建的项目可以编辑/删除,但所有人都可以看到。
我在考虑不同目录中的重复项,例如
"public_items": {
"item1": {},
"item2": {}
}
"items": {
"userId": {
"item1": {},
"item2": {},
}
}
Run Code Online (Sandbox Code Playgroud)
但这似乎不是一个好主意。
规则以原子方式应用。这意味着,如果该位置或父位置没有授予访问权限的规则,则读取或写入操作将立即失败。即使可以访问每个受影响的子路径,在父位置的读取也将完全失败。 https://firebase.google.com/docs/database/security/securing-data#read_and_write_rules_cascade
如果不能将规则应用于每个项目,则如何用不同的所有者构建项目目录?
应用程序具有 ML Kit 功能(翻译)。我试图通过引入动态模块功能、按需加载来减小应用程序的大小。
遵循本指南 将 'com.google.mlkit:playstore-dynamic-feature-support:16.0.0-beta1' 添加到基础 apk 的 build.gradle
com.google.mlkit:translate:16.1.2 在功能模块 build.gradle 中,
一切都会编译并尝试在模拟器上运行,但不幸的是应用程序从日志启动时崩溃
java.lang.RuntimeException: Unable to get provider com.google.mlkit.common.internal.MlKitInitProvider: com.google.firebase.components.MissingDependencyException: Unsatisfied dependency for component Component<[class com.google.android.gms.internal.mlkit_translate.zzxa]>{0, type=0, deps=[Dependency{anInterface=class com.google.mlkit.common.sdkinternal.SharedPrefManager, type=required, injection=direct}, Dependency{anInterface=class com.google.android.gms.internal.mlkit_translate.zzwx, type=required, injection=direct}]}: class com.google.mlkit.common.sdkinternal.SharedPrefManager
Caused by: com.google.firebase.components.MissingDependencyException: Unsatisfied dependency for component Component<[class com.google.android.gms.internal.mlkit_translate.zzxa]>{0, type=0, deps=[Dependency{anInterface=class com.google.mlkit.common.sdkinternal.SharedPrefManager, type=required, injection=direct}, Dependency{anInterface=class com.google.android.gms.internal.mlkit_translate.zzwx, type=required, injection=direct}]}: class com.google.mlkit.common.sdkinternal.SharedPrefManager
Run Code Online (Sandbox Code Playgroud)
哪一种没有意义。因为我添加了 playstore-dynamic-feature-support。