gpt4 book ai didi

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

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

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


首先,我将使用电子邮件/密码身份验证类型的简单登录(尽管如果用户电子邮件的验证必须涉及服务器端编码,则可能会使用 Angular 色)。
我有一个包含用户数据的 userData 对象(读取存储在其中的用户帐户)。要求每个用户只能读取自己帐户中存储的数据。所有用户将访问的实际数据将存储在名为comingdata 的单独节点中。
用户可以访问comingdata 中的哪些数据将取决于用户进行的购买类型:
具有“订阅”类型的用户将能够访问所有数据,直到其订阅到期。我认为“now”变量可用于通过安全表达式来实现此目的。
具有“购买”类型的用户只能访问购买的数据(在数组中列出)。
[email protected]需要能够读取所有用户的所有数据,但仅写入(和读取)即将到来的Data节点。

这是我尝试保存到 Firebase 的测试数据结构:

new Firebase(url).update({
userData: {
"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="9dfcf9f0f4f3ddf0e4f9f2f0fcf4f3b3fef2f0" rel="noreferrer noopener nofollow">[email protected]</a>" : {
subscription : {expire : '9999999999999'},
purchase : []
},
"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="a8dccddbdcfddbcddae8dbc7c5dfc0cddacd86cbc7c5" rel="noreferrer noopener nofollow">[email protected]</a>" : {
subscription : {expire : '1379904665974'},
purchase : ['upcomingData/-J47idp64ANBRmFS5rVY', 'upcomingData/-J47idpHg-pwzW1c-rfw', 'upcomingData/-J47idpLfIhlUQWTPc9y']
},
"<a href="https://stackoverflow.com/cdn-cgi/l/email-protection" class="__cf_email__" data-cfemail="7105140205240214034331021e1c0619140314141d02145f121e5f041a" rel="noreferrer noopener nofollow">[email protected]</a>" : {
subscription : {expire : '1379904734517'},
purchase : ['upcomingData/-J47idp64ANBRmFS5rVY', 'upcomingData/-J47idpHg-pwzW1c-rfw', 'upcomingData/-J47idpLfIhlUQWTPc9y']
}
}
});

由于“.”,这不起作用字符。
我应该像这样使用 DOT mangle 吗:

"admin@mydomainDOTcom" : {...}

或者更确切地说,我应该在创建 userData 节点时“push()”“清空”用户帐户并将用户的用户名保存为其中的 {"id": "[email protected] "} 属性?
如何在 Firebase 中设置安全规则,以便 userData 的内容始终为只读,但成功购买时(例如使用 PayPal)写入除外?
是否可以安全地完成此操作而无需求助于服务器代码?
我知道我可以设置安全规则,以便只有服务器可以将数据写入 Firebase,但这将涉及服务器端代码,然后该代码将写入适当的数据以响应有效的 PayPal 付款通知 (IPN) - 服务器我宁愿避免的端代码不仅因为我不太精通服务器端编码(尽管应该能够成功的node.js),而且因为LAMP堆叠共享服务器仍然比所需的VPS便宜得多对于节点(aa,我不能做 php :( )。
客户端代码将使用很棒的 Angular.js/angularFire 组合来开发。
感谢您的时间,
贾里德

最佳答案

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

  1. 对于“。”字符,您可以将其替换为“,”。简单登录会自动为您执行此操作,例如,如果您使用的是 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