我有一个项目数据库结构:
users
isSuperMan: false
isAdmin: false
info:
givenName: xxxxxx
address: yyyyyy
....
memberships:
2018:
paid: 10
paidOn: 20198-01-01
paymentType: 1
2017:
paid: 10
paidOn: 20198-01-01
paymentType: 1
....
我当前的Firebase规则已设置为允许登录用户创建/更新/删除自己的数据
{
"rules": {
".read": "auth.uid != null",
".write": false,
"users": {
"$uid": {
".write": "$uid == auth.uid"
}
}
}
}
由于我完全是Firebase规则的新手,所以我看不到如何设置它们来处理以下业务案例,感谢您的帮助 我想知道我是否不应该去Firestore处理这种情况?
具有Superadmin或Admin角色(true)的登录用户可以读取/写入所有数据
标准登录用户可以读取/写入自己的信息
答案 0 :(得分:0)
要授予具有管理员角色的人员对整个数据库的读取权限,请使用以下规则:
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
// we can get the innermost NavController using this view,
// because we are inside its subtree:
nestedNavController = Navigation.findNavController(view)
// we can find the outer NavController passing the owning Activity
// and the id of a view associated to that NavController,
// for example the NavHostFragment id:
mainNavController = Navigation.findNavController(activity!!, R.id.mainNavHostFragment)
}
此读取规则将替换您当前拥有的规则,因为现在所有登录用户的 all 都可以读取整个数据库。
要允许每个用户读取/写入自己的信息,请将以上内容修改为:
{
"rules": {
".read": "root.child('users').child(auth.uid).child('isAdmin').val() === true"
}
}
我强烈建议您检出Firebase documentation on security rules,特别是securing user data的部分(涵盖上面显示的第二步)以及great video explaining security rules。