使用 Appsync/Firebase 的细粒度访问控制
Fine grained access control with Appsync/Firebase
当需要细粒度访问控制时,使用 Appsync/Firebase 创建一个完整的 "serverless" 应用程序是个好主意吗?
我尝试使用 Firebase 构建应用程序,然后使用 AppSync,感觉这些解决方案有点让我瘫痪,我开始认为也许我仍在思考 "old" 解决方法问题,这就是让我瘫痪的原因,而不是工具。
我挣扎的地方是访问控制。
Firebase 有 "Firebase rules" 和 AppSync 有 "VTL"(Apache Velocity Template Language),两者都提供了相对较好的解决方案,"Firebase rules" 更容易和更清晰,但 VTL 更健壮,因为它基本上是一种编程语言.
问题是我试图根据 "collection/table" 权限授予用户访问数据库中文档的权限。因此,每个用户在 "collection/table" 中都有一个具有细粒度权限的文档,我需要阅读该文档以了解他是否有权访问他正在尝试访问的资源 read/write.
我可以使用 firebase 和 AppSync 读取数据库,但两者都有其局限性:
- Firebase 规则有请求限制。如果用户
有多个 "permission groups".
- AppSync 更灵活,但仍然有限,如果我要编写一些逻辑,我宁愿使用我选择的语言而不是 VTL。此外,我宁愿将该代码放在我的本地项目中,而不是仅在通过 GUI 访问的云中。
所以,最后,感觉这两种解决方案都让我在它们之前有另一个层来做更复杂的事情,所以它可以是函数,也可以是整个应用程序。
但是,为什么我需要他们所有的 API?在 Appsync/Firebase 之前有另一层 基本上迫使我重新实现 GraphQL/Firebases API,然后,为什么不使用其他工具构建它?
所以,我做错了吗?将应用程序部署在 AppEngine 或类似解决方案上(从而失去功能优势)会更好吗?
注意:如果读了这么多还是不太清楚,我很抱歉,英语是我的第一语言。
AWS AppSync 最近添加了管道解析器,这听起来像是适合您的用例的完美解决方案。您使用一系列解析器函数组成 GraphQL 解析器。您对文档集合 table 的身份验证检查可以作为可重用函数来实现。
查看 Pipeline Resolvers 教程,看看它是否满足您的需求。
当需要细粒度访问控制时,使用 Appsync/Firebase 创建一个完整的 "serverless" 应用程序是个好主意吗?
我尝试使用 Firebase 构建应用程序,然后使用 AppSync,感觉这些解决方案有点让我瘫痪,我开始认为也许我仍在思考 "old" 解决方法问题,这就是让我瘫痪的原因,而不是工具。
我挣扎的地方是访问控制。 Firebase 有 "Firebase rules" 和 AppSync 有 "VTL"(Apache Velocity Template Language),两者都提供了相对较好的解决方案,"Firebase rules" 更容易和更清晰,但 VTL 更健壮,因为它基本上是一种编程语言.
问题是我试图根据 "collection/table" 权限授予用户访问数据库中文档的权限。因此,每个用户在 "collection/table" 中都有一个具有细粒度权限的文档,我需要阅读该文档以了解他是否有权访问他正在尝试访问的资源 read/write.
我可以使用 firebase 和 AppSync 读取数据库,但两者都有其局限性:
- Firebase 规则有请求限制。如果用户 有多个 "permission groups".
- AppSync 更灵活,但仍然有限,如果我要编写一些逻辑,我宁愿使用我选择的语言而不是 VTL。此外,我宁愿将该代码放在我的本地项目中,而不是仅在通过 GUI 访问的云中。
所以,最后,感觉这两种解决方案都让我在它们之前有另一个层来做更复杂的事情,所以它可以是函数,也可以是整个应用程序。 但是,为什么我需要他们所有的 API?在 Appsync/Firebase 之前有另一层 基本上迫使我重新实现 GraphQL/Firebases API,然后,为什么不使用其他工具构建它?
所以,我做错了吗?将应用程序部署在 AppEngine 或类似解决方案上(从而失去功能优势)会更好吗?
注意:如果读了这么多还是不太清楚,我很抱歉,英语是我的第一语言。
AWS AppSync 最近添加了管道解析器,这听起来像是适合您的用例的完美解决方案。您使用一系列解析器函数组成 GraphQL 解析器。您对文档集合 table 的身份验证检查可以作为可重用函数来实现。
查看 Pipeline Resolvers 教程,看看它是否满足您的需求。