Vue.js Firebase RealTime DB规则-设置由应用程序功能修改的属性的规则

时间:2018-07-24 12:10:14

标签: firebase firebase-realtime-database vue.js firebase-security-rules

我有一个项目数据库结构:

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处理这种情况?

  1. 具有Superadmin或Admin角色(true)的登录用户可以读取/写入所有数据

  2. 标准登录用户可以读取/写入自己的信息

  3. 标准用户可以读取但不能更新/删除成员资格
  4. 会员数据仅在登录用户付款时写入

1 个答案:

答案 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