FireBase安全规则与用户角色
FireBase Security Rules with User roles
首先,我之前研究过这个问题,并参考了之前的问题。我已经做了问题中所述的,但没有任何积极的结果。
Firebase:根据用户角色设置安全规则
我正在使用:
Angular JS
Firebase
AngularFire -- Integrate Firebase with AngularJS
E-mail and Password Firebase Authentication
我有一个节点在Firebase为我的用户:
"users" : {
"simplelogin:49" : {
"email" : "myemail@something.com",
"full_name" : "First Last",
"roles" : {
"administrator" : true
}
},
"simplelogin:64" : {
"email" : "me@me.com",
"full_name" : "first last",
"roles" : {
"administrator" : false
}
}
}
我正试图在我的客户端表中添加一个条目,同时登录到simplelogin:49
,正如您所看到的是管理员。
// Create the Client
var clientRef = firebaseUrl+'clients';
var clientsListRef = new Firebase(clientRef);
clientsListRef.push({
'uid': userData.uid,
'number': cl.number,
'company': cl.company,
'full_name': cl.full_name,
'email': cl.email,
'phones': {
'primary': cl.phones.primary,
'cell': cl.phones.cell,
'alte': cl.phones.alte
},
'addresses': {
'billing': {
'line1': cl.addresses.billing.line1,
'line2': cl.addresses.billing.line2,
'city' : cl.addresses.billing.city,
'state': cl.addresses.billing.state,
'zip' : cl.addresses.billing.zip
},
'shipping': {
'line1': cl.addresses.shipping.line1,
'line2': cl.addresses.shipping.line2,
'city' : cl.addresses.shipping.city,
'state': cl.addresses.shipping.state,
'zip' : cl.addresses.shipping.zip
}
}
});
我在Firebase中为clients
节点设置了一些规则,它们如下:
"clients": {
"$auth": {
".write": "root.child('users').child('$auth.uid').child('roles').child('administrator').val() === true"
}
}
我也尝试过这个规则:
"clients": {
".write": "root.child('users').child('auth.uid').child('roles').child('administrator').val() === true"
}
当我运行这个时,我得到的是一个permission denied error。如果在Firebase模拟器中运行它,结果如下:
Attempt to write Success({"user":"Test"}) to /clients with auth=Success({"id":49,"provider":"password","uid":"simplelogin:49"})
/
/clients:.write: "root.child('users').child('auth.uid').child('roles').child('administrator').val() === true"
=> false
No .write rule allowed the operation.
Write was denied.
我只想知道我错过了什么。问题中的人说他/她的事业很成功。
首先,您应该使用为每个用户自动生成的Firebase Authentication用户id。关于如何访问经过身份验证的用户id,你必须查看AngularFire文档,但通常是这样的:
firebase.auth().currentUser().uid
然后,一旦创建了使用该id作为字典名称的用户,如下所示:
"users" : {
"Rx6H4mjwwgVo6UKy2vSuOD5dTwk2" : {
"email" : "myemail@something.com",
"full_name" : "First Last",
"roles" : {
"administrator" : true
}
},
"U1x3narB2AQQ0FvMxu7RVQAxb7A2" : {
"email" : "me@me.com",
"full_name" : "first last",
"roles" : {
"administrator" : false
}
}
}
你可以使用auth.uid
变量在Firebase数据库安全规则获得他们的用户id:
"rules" : {
"clients": {
".write": "root.child('users').child(auth.uid).child('roles').child('administrator').val() == true"
}
}
相关文章:
- 我应该如何应用if-else条件来向具有不同用户角色的人显示不同的菜单
- 活动在magento中记录用户角色和权限
- 检查用户是否具有角色分析云代码
- 流星用户帐户和alanning流星角色-登录时检查角色
- Angular JS授权-在加载页面之前检查用户角色
- 如何为Meteor应用程序中的第一个用户分配特定角色
- 与设计用户相关联的多个模型-根据角色选择填写一个模型
- 在xmpp多聊天中,管理员角色只授予创建房间的在线用户成员资格
- MeteorJS用户帐户:核心和流星角色
- Rails:基于用户角色的Javascript
- Parse.com 云代码将用户添加到现有角色不起作用
- 护照 JS - 一个登录表单 - 重定向到不同的 URI,具体取决于用户角色
- 与测试用户角色关联的 Facebook 无法获取user_likes
- 如何在mongodb / nosql中创建用户角色和权限
- 显示用户角色:angularjs、rolify、rails应用程序
- 在不带括号的HTML页面中显示用户角色
- 在angular中,不同的用户角色对应不同的菜单项
- Angular2路由可以使用用户角色参数激活和身份验证(JWT)
- 防止 javascript 函数生成删除操作链接(如果登录的用户角色为关联)
- FireBase安全规则与用户角色