Javascript Firebase数据库安全规则-基于动态CustomClaim名称设置访问权限
因此,我使用下面的Node.js代码,根据每个用户所属的组,为他们分配了一个自定义声明: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
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"
}
}
}
}}
弗兰克-这么简单的解决办法!非常感谢你!