首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >防火墙中大型组的安全规则

防火墙中大型组的安全规则
EN

Stack Overflow用户
提问于 2019-12-30 11:16:40
回答 1查看 205关注 0票数 0

短版

我正在使用防火墙构建一个应用程序,用户可以在其中创建课程,为这些课程添加资源,然后让其他用户注册他们的课程,这将使他们能够访问所有的课程资源。我正在努力建立安全规则,以便只有课程组织者或课程成员才能访问这些资源。我的主要问题是允许用户列出他们注册的课程中的所有资源,因为列表请求不允许安全规则中的查询,我需要检查该用户是否是该课程的成员。什么是最好的方法,让数百(或潜在的数千)当然会员可以很容易地列出所有的课程资源,同时确保它是不可能的非会员访问它?

文档的限制部分中,它特别提到将角色移动到大型或复杂组的单独集合中,但这样做将需要执行查询的安全规则来检查对列表请求不可能的访问。

全verison

我正在创建一个原型web应用程序,客户端直接访问防火墙。消除后台处理简单数据访问的需要是令人耳目一新的,但我现在真的很难为我的用例找到正确的数据结构和方法,特别是在实现适当的安全规则方面。

我对关系数据库做了大量的工作,但对于nosql数据库和消防站来说,我还是很新的,但这并没有帮助。

概念

我的应用程序中的主要集合是用户、课程和资源。用户可以创建他们创建学习资源的课程,然后其他用户可以注册这些课程,因此可以访问这些课程中的所有资源。由于某些课程只会被邀请,用户不可能为他们不是其成员的课程获取资源。

主要要求是:

  • 课程组织者需要对他们的课程和资源进行全面的读写访问。
  • 课程成员需要完全阅读他们的课程和资源。
  • 组织者和会员都需要能够很容易地列出他们的所有课程,并为每个课程列出他们的所有资源。
  • 主办机构和成员不得检索他们不拥有或不属于的课程或资源的信息。

My approach

首先,我的方法是大量使用子集合。对于组织者或观点,用户有课程,有资源,所以我以这种方式建模。

用户->课程->资源

组织者的安全规则在这里也很简单,因为用户id是文档路径的一部分,它可以很容易地与可用的用户uid进行检查(谢谢firebase auth)。

i.e

代码语言:javascript
运行
复制
match /users/{userId}/courses/{courseId}/resources/{resourceId} {
    allow read, write, update, delete: if (request.auth.uid == userId) 
}

但事实证明,给予会员只读访问的难度要大一些。我需要一个合适的地方来存储那个映射。最后,我尝试使用用户的子集合来存储它,因此可以使用:/users/{userId}/course_memberships/{courseId}查找课程成员。

理论上,我可以编写一条安全规则来授予对如下课程和资源的读访问权:

代码语言:javascript
运行
复制
match /users/{userId}/courses/{courseId}/resources/{resourceId} {
    allow read: if exists(/databases/$(database)/documents/users/$(request.auth.uid)/course_memberships/${courseId})
}

但是,只有在检索单个文档时,list请求才能在安全规则中计算查询,因此此设置不允许课程成员查看给定课程中所有资源的列表。

我不知道这里的正确方法是什么,我看到的唯一选择是:

  1. 为每个成员创建一个单独的集合层次结构,其中包含其所有课程和所有资源,包括用于列出其资源的关键信息,并使用云函数对它们进行同步。我理解nosql是关于存储去角色化的数据的,但是这感觉像是很多额外的数据,特别是当它只是安全规则所必需的时候。
  2. 将每个成员的uid添加到每个资源上的数组中(每个资源可能有数千个),这也会让人觉得有很多额外的数据,而且它将向所有其他成员公开这些it,这似乎是错误的。

这里是否有更好的方法,或者说消防站不太适合这种类型的问题?

希望这个问题还没有得到回答,我做了一个搜索,找不到同样的场景。

EN

回答 1

Stack Overflow用户

发布于 2019-12-30 13:59:27

read规则可以分解为getlist,后者可以应用于查询。示例:

允许列表:如果条件;

更多信息可以在这里找到。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59529918

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档