在Firestore中,我有一个大的文档集(在它下面有子集合),我有3个角色(“管理员”,“半管理员”和“用户”)。默认情况下,每个新用户都没有访问权限,然后他们可能会获得对3个文档的“User”访问权限,对2个文档的“Admin”访问权限和对1个文档的“Semi”访问权限。
我想用自定义令牌来实现这一点,但这意味着我需要为每个文档创建3个字段,这将很快突破1000字节的限制。
我的问题是,如果我仍然可以这样做,只是将文档添加到他们可以访问的令牌(这意味着如果他们没有那个键:值对,默认值是没有访问权限),或者这不是一个很好的方法吗?
另一种方法是让云函数或安全规则在其用户配置文件中查找值,但这将导致大量读取。
理想的情况是“自定义令牌”之类的东西,但这是特定于文档而不是特定于用户的……有什么想法吗
1条答案
按热度按时间nmpmafwu1#
据我所知,您希望构建一个文档级访问控制列表,为各个用户提供不同的权限级别。尝试将用户可以访问的文档列表存储在用户的ID令牌中确实会很快导致令牌大于允许的值(并且还会增加用户的带宽费用)。
解决方案是将必要的信息存储在数据库本身中,并在安全规则中读取它。没有办法防止额外的文档读取费用,但应该可以将其限制为每次文档读取或查询一次额外的读取。
我能想到的唯一替代方案是在数据库中为每个用户保留一个单独的区域,并将他们访问的文档按您拥有的三个角色进行分割。这将导致大量的数据重复,我怀疑这将超过从安全规则中节省的文档读取。