gpt4 book ai didi

angularjs - 如何在复杂的安全规则要求的背景下对 Firebase 中的数据进行非规范化/结构化?

转载 作者:行者123 更新时间:2023-12-02 04:50:07 27 4
gpt4 key购买 nike

我原来的标题是“如何在 Firebase 中构建和保护用户(帐户)数据以实现安全的用户访问”。因为这是这个问题的领域,但后来我认为可以形成一个更一般的问题。话虽如此,我熟悉
https://www.firebase.com/blog/2013-04-12-denormalizing-is-normal.html
尽管这篇文章很棒,但它并不完全适用于我的问题,所以我开始了。


首先,我将使用电子邮件/密码身份验证类型的简单登录(如果用户电子邮件的验证必须涉及服务器端编码,我可能会使用 Persona)。
我有一个包含用户数据的 userData 对象(读取用户帐户)存储在其中。要求每个用户只能读取存储在自己帐户中的数据。所有用户将访问的实际数据将存储在一个名为 comcomingData 的单独节点中。
用户可以访问 commoningData 中的哪些数据将由用户进行的购买类型决定:
那些具有“订阅”类型的人将能够访问所有数据,直到他们的订阅到期。我假设“现在”变量可用于通过安全表达式实现此目的。
那些具有“购买”类型的人只能访问购买的数据(列在数组中)。
admin@mydomain.com 需要能够读取所有用户的所有数据,但只能写入(和读取)即将到来的数据节点。

所以这里是我试图保存到 Firebase 的测试数据结构:

new Firebase(url).update({
userData: {
"admin@mydomain.com" : {
subscription : {expire : '9999999999999'},
purchase : []
},
"testUser@somwhere.com" : {
subscription : {expire : '1379904665974'},
purchase : ['upcomingData/-J47idp64ANBRmFS5rVY', 'upcomingData/-J47idpHg-pwzW1c-rfw', 'upcomingData/-J47idpLfIhlUQWTPc9y']
},
"testUser2@somwhereelse.co.uk" : {
subscription : {expire : '1379904734517'},
purchase : ['upcomingData/-J47idp64ANBRmFS5rVY', 'upcomingData/-J47idpHg-pwzW1c-rfw', 'upcomingData/-J47idpLfIhlUQWTPc9y']
}
}
});

这行不通,因为 '.'字符。
我是否应该像这样进行 DOT 处理:

"admin@mydomainDOTcom" : {...}

或者我应该在创建到 userData 节点时“推送()”“清空”用户帐户,并将用户的用户名保存为其中的 {"id": "admin@mydomain.com"} 属性?
我如何在 Firebase 中设置安全规则,以便 userData 的内容在任何时候都可以是只读的,除了在成功购买时写入(比如使用 PayPal)?
是否可以在不借助服务器代码的情况下安全地完成此操作?
我知道我可以设置安全规则,以便只有服务器可以将数据写入 Firebase,但这将涉及服务器端代码,然后该代码将写入适当的数据以响应有效的 PayPal 付款通知 (IPN) - 服务器- 我宁愿避免的端代码不仅因为我不是很精通服务器端编码(尽管应该能够成功 node.js),而且因为 LAMP 堆叠共享服务器仍然比所需的 VPS 便宜得多对于节点(aa,我不能做 php :( )。
客户端代码将使用很棒的 Angular.js/angularFire 组合开发。
珍惜你的时间,
贾里德

最佳答案

这里有两个不同的问题,分别处理:

  1. 对于“.”字符,您可以将它们替换为“,”。 Simple Login 会自动为您执行此操作,例如,如果您使用的是 Persona 提供商,转义的电子邮件地址将作为 userObject.id(以及 userObject.email 中的真实电子邮件地址)访问。

    <
  2. 要创建只读记录,除了第一次,您可以使用如下规则:

".write": "!data.exists()"

这将防止记录在写入一次后被修改。

关于angularjs - 如何在复杂的安全规则要求的背景下对 Firebase 中的数据进行非规范化/结构化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19017175/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com