TL; DR:是否有任何安全问题让数据库的客户知道其他客户端的uid?例如:是否可以使用已知的uid创建auth对象以像其他用户一样查询数据库?
我需要超级用户在各自的节点内定义默认值。然后,常规用户(属于超级用户“组”)可以定义自己的值,但如果有一个未由用户定义的密钥,则该用户节点的客户端可以回退到超级用户的默认值。
但要完成它,我需要用户知道他们各自超级用户的uid。
示例数据库将是:
{
"superusers": {
"K32kd2dD8F9vf9...": {
"key1": "value1",
"key2": "value2",
"key3": "value3"
}
},
"users": {
"T53ggft56Df52G...": {
"key2": "myvalue2",
"key3": "myvalue3",
"superuser": "K32kd2dD8F9vf9..."
}
}
}
在这种情况下,用户“T53ggft56Df52G ...”为“key2”和“key3”定义自己的值,但不为“key1”定义。因此,任何读取“T53ggft56Df52G ...”节点的客户端都可以读取“超级用户”值并回退到“K32kd2dD8F9vf9 ...”并检索默认的“key1”值。
更新
至于周杰伦的评论。实际上,我已计划超级用户创建用户。但是,因为不可能再想到的是实现会员请求系统来完成类似的事情。
为了更好地解释我的用例,这是一个新的JSON示例,它显示了我需要处理的实际数据:
{
"restaurant_franchise": {
"K32kd2dD8F9vf9...": {
"info": ...,
"menu": {
"awesome burguer": { ... }, //recipe, cost, sizes...
"amazing burguer": { ... },
"incredible burguer": { ... }
},
"members": { "T53ggft56Df52G...": true },
"membership_requests": { ... }
}
},
"restaurant": { // the actual establishment
"T53ggft56Df52G...": {
"info": { ... },
"menu": {
"amazing burguer": { ... }, //this one has less sizes available
"incredible burguer": { ... } //this other one costs more
},
"default_to": "K32kd2dD8F9vf9..."
}
}
}
这里,读取“T53ggft56Df52G ...”菜单的客户端可以从丢失的密钥中获取默认值。在这种情况下,餐厅缺少“令人敬畏的burguer”,因为它没有改变“K32kd2dD8F9vf9 ...”中定义的原始值。