因此,我有一个应用程序,用户可以在其中订购蛋糕并进行其他个人资料管理,规则如下所示:
> { "if": {
> "field": "type",
> "equals": "microsoft.insights/activityLogAlerts" }, "then": {
> "effect": "auditIfNotExists",
> "details": {
> "type": "Microsoft.Insights/alertRules",
> "name": "microsoft.network/networksecuritygroups/securityrules/delete",
> "existenceCondition": {
> "field": "Microsoft.Insights/alertRules/isEnabled",
> "equals": "true"
> }
> } } }
简单来说,它们意味着任何人都可以读取cakes节点(但没有人可以写入)。经过身份验证的用户可以查看或写入其on节点。
到目前为止,这很好。
现在,我的要求是:当某人通过该应用程序下订单时,我需要将其存储到顶级节点中的firebase db中(让我们说定购)。问题是将在订单节点上放置哪种安全性?
在功能定义中:应用程序应该能够在用户签出时创建新订单,除卖方以外的任何人都不能读取这些订单,只有卖方应具有对订单的更新访问权限。
答案 0 :(得分:1)
如果您希望每个人都可以写订单,而没有人可以阅读,则规则只是cakes
的规则的反面:
"rules": {
"orders" : {
".read": false,
"$orderId": {
".write": true
}
},
任何人都可以在/orders
下推送新数据。只要您使用push()
来生成新密钥,就可以确保它们永不冲突。
使用这些规则,只有系统级管理员才能读取数据。也就是说:您可以在Firebase控制台中阅读它,或者其他人使用Admin SDK可以阅读它。
您可能希望打开它以阅读更多内容,例如通过具有应用程序级管理员的概念。假设您的UID为uidOfVik
,则可以对数据库中的管理员列表进行建模:
admins: {
uidOfVik: true
}
现在您只能通过以下方式允许管理员读取订单:
"rules": {
"orders" : {
".read": "root.child('admins').child(auth.uid).exists()",
"$orderId": {
".write": true
}
},