Firebase 实时规则:使用基于角色(令牌)的身份验证将用户分成多个组

Firebase Realtime Rules: Split users into multiple groups w/ role-based (token) authentication

每个用户都使用州和城市的令牌进行身份验证。

我希望用户能够读取位于 /data/$state/data/$state/$city 的数据

对于 /data/$state/$city 我可以添加一条规则(在 /data/$state/$city 上): .read: $state == auth.token.state && $city == auth.token.city",

这会很好用,我会写(在/data/$state 上)如何授予对/data/$state 访问权限的访问权限: .read: $state == auth.token.state",

这将授予对任何城市(在州 /data/$state/* 中)的任何节点的读取权限,并忽略前一个(基于 Firebase 实时规则,其中最高规则优先)。

除了将我的数据扁平化为:

,我还有什么办法可以处理这个问题吗?

/城市/$state/$city

/州/$state

因此在各自节点中处理每个案例的安全性?

谢谢!

不,正如doc中所解释的那样,这是不可能的:

.read and .write rules work from top-down, with shallower rules overriding deeper rules.

...

Shallower security rules override rules at deeper paths. Child rules can only grant additional privileges to what parent nodes have already declared. They cannot revoke a read or write privilege.


因此,您确实需要按照问题末尾所述对数据进行非规范化处理。请注意,update() 方法允许轻松写入不同的节点,请参阅 doc.

中的示例