Javascript Firebase数据库安全规则-基于动态CustomClaim名称设置访问权限

Javascript Firebase数据库安全规则-基于动态CustomClaim名称设置访问权限,javascript,firebase-realtime-database,firebase-security,Javascript,Firebase Realtime Database,Firebase Security,因此,我使用下面的Node.js代码,根据每个用户所属的组,为他们分配了一个自定义声明: exports.giveToken = functions.database.ref("userSearch/{Id}").onCreate((snapshot,context)=>{ if(snapshot.child("cId").exists()){ const group = snapshot.child("cId").val

因此,我使用下面的Node.js代码,根据每个用户所属的组,为他们分配了一个自定义声明:

exports.giveToken = functions.database.ref("userSearch/{Id}").onCreate((snapshot,context)=>{
 if(snapshot.child("cId").exists()){
   const group = snapshot.child("cId").val();
   const userId = context.params.Id;
    return admin.auth().setCustomUserClaims(userId, {[group]: true});
 }else{
   return null;
 }

})
如您所见,companyId/customClaim名称是动态设置的,即它可以是1234,也可以是123456

在Firebase的数据库安全规则中,这是我的规则:

{
  "rules": {
        "c" :{
        "$comp_id" : {
              "$uid": {
              ".read" :"auth.uid == $uid && auth.token.$comp_id === true",
              ".write": "auth.uid == $uid"
              }
        }
     
      }
}}
问题有两个方面,Firebase自定义声明是否可以实现这种访问控制?如果可以,我如何实现它

我在这里的最终目标是,根据用户的组为用户Joins>分配一个自定义声明>只能访问该组(或节点)中的数据


非常感谢。

您需要使用方括号表示法:

{
  "rules": {
        "c" :{
        "$comp_id" : {
              "$uid": {
              ".read" :"auth.uid == $uid && auth.token[$comp_id] === true",
              ".write": "auth.uid == $uid"
              }
        }
     
      }
}}

弗兰克-这么简单的解决办法!非常感谢你!