具有多个业务实体的Firestore、Firebase身份验证和Firestore规则
我想看看Firestore是否适合我的需要 为了可扩展性和安全性,我正在使用Firestore设计一个多租户系统。仅使用Firestore、Firebase身份验证和Firebase规则来处理所有CRUD操作,是否可以正确地做到这一点?实体背后的理念是:具有多个业务实体的Firestore、Firebase身份验证和Firestore规则,firebase,google-cloud-firestore,firebase-authentication,firebase-security,Firebase,Google Cloud Firestore,Firebase Authentication,Firebase Security,我想看看Firestore是否适合我的需要 为了可扩展性和安全性,我正在使用Firestore设计一个多租户系统。仅使用Firestore、Firebase身份验证和Firebase规则来处理所有CRUD操作,是否可以正确地做到这一点?实体背后的理念是: System > Account > Business > Customer 每个实体级别的角色包括: Administrator, Manager, Support, Report, Unauthenticated (th
System > Account > Business > Customer
每个实体级别的角色包括:
Administrator, Manager, Support, Report, Unauthenticated (the customer)
账户有业务,业务有客户。客户不需要进行身份验证,而是阅读特定文档(由业务部门指定),然后创建自己的特定新文档。他们可以创建多个文档,但会有基于时间的卷阈值(没有DOS!)
我相信,如果Firestore没有将帐户作为拥有多个业务的超集,那么Firestore规则将非常有效
是否可以创建这样一个仅使用Firestore、身份验证和规则的系统?我想保持事情简单,但也不想用钳子敲打钉子
提前感谢您的洞察力 有了一套定义良好的系统,您确实可以将Firestore用于这种多租户系统 在安全规则中,您可以根据访问角色组合不同的声明 你尤其应该:
auth.token.businessId==“xyz”
,auth.token.role==“Support”
allow create:if request.auth.uid==userId&&request.resource.data.businessId==auth.token.businessId
businessId
,accountId
,等等)。通过使用(子)集合模拟实体树,或者在查询中使用一些where()
子句
请注意,由于客户不需要进行身份验证,因此如果他们拥有其他业务的ID(即
DocumentReference
s),他们可能会从其他业务读取和创建文档
您可能需要为每个用户(角色、帐户、业务等)管理一组声明,这可能会变得复杂,因此您可能会对下面的文章感兴趣,这篇文章解释了如何使用这些声明。有了一组定义良好的声明,您确实可以将Firestore用于这样的多租户系统 在安全规则中,您可以根据访问角色组合不同的声明 你尤其应该:
auth.token.businessId==“xyz”
,auth.token.role==“Support”
allow create:if request.auth.uid==userId&&request.resource.data.businessId==auth.token.businessId
businessId
,accountId
,等等)。通过使用(子)集合模拟实体树,或者在查询中使用一些where()
子句
请注意,由于客户不需要进行身份验证,因此如果他们拥有其他业务的ID(即
DocumentReference
s),他们可能会从其他业务读取和创建文档
您可能需要为每个用户(角色、帐户、业务等)管理一组声明,这可能会变得很复杂,因此您可能会对下面的文章感兴趣,这篇文章解释了如何进行声明。如果我理解的话,这将要求在每个文档上都有业务ID,作为授权过程的一部分?是吗?是的,除非所有具有帐户授权的用户都可以读/写此帐户中的业务。很难准确回答,因为我们不知道您的安全性是如何应用于您的树结构的。但根据经验,您应该在给定的文档中包含一个或多个字段,这些字段对应于用户的声明。谢谢Renaud。与关系数据库相比,文档的安全性对我来说无疑是一种思维转移。我很感谢你的帮助。如果我理解的话,那就需要在每个文档上都有业务ID,作为授权流程的一部分?是吗?是的,除非所有具有帐户授权的用户都可以读/写此帐户中的业务。很难准确回答,因为我们不知道您的安全性是如何应用于您的树结构的。但根据经验,您应该在给定的文档中包含一个或多个字段,这些字段对应于用户的声明。谢谢Renaud。与关系数据库相比,文档的安全性对我来说无疑是一种思维转移。我感谢你的帮助。