面向 SaaS 的 Fóir
你的产品是一个服务大量客户的 schema,大部分工作是让他们的数据彼此分开。在 Fóir 中,schema 是有意共享的,而隔离不需要你来写。
一个 schema,一处修改
多租户通常迫使你二选一:要么是每个客户都必须同时迁移的一个 schema,要么是每个客户一个分支,一年后没人能安全地修改。
在 Fóir 中,模型在你的项目上定义一次,项目内每个客户的组织都继承它。只有一份定义,而不是每个客户一份副本,所以编辑它就会改变所有客户所提供的内容。客户可以在你的模型之下定义自己的模型,而不必分叉你其余的 schema。
共享 schema 不等于共享数据
你承受不起的故障是一个客户读到另一个客户的行,而在大多数技术栈中,挡在中间的只是某人记得写的一个子句。
每个客户是你项目内的一个组织,他们写入的每一行在数据库中都带有该组织的标记。访问由你的应用之下的 Postgres 强制执行,而不是由当前运行的某条代码路径来执行,所以没有指明客户的请求会取回他们的零行,而不是全部行;新增存放数据的位置,也无法在没有规则覆盖的情况下上线。你代码中的任何读写都不会指明客户。由它所运行的凭证决定,所以查询不可能被指向错误的客户。
开通一个客户只需一次 API 调用
注册一个客户通常意味着一个配置脚本:创建租户、设置品牌、写入初始数据,步骤失败时又把其中一半留在原处。
一次调用即可开通客户,以你为其选定的 id 作为键。它会创建带有品牌设置的组织,还可以写入其设置、添加第一位成员,并签发一个仅限该客户使用的密钥。他们立即继承你的模型,无需复制任何 schema。用同一个 id 再次调用,它会从未完成的步骤继续,而不是创建第二个客户。
你最大的客户会问什么
让你向高端市场迈进的那笔交易,会带着安全评审而来,而诚实的回答通常是一张意图示意图。
这里的隔离是一种数据库机制,而不是一项政策。他们的用户在自己拥有的域名上登录,屏幕上写的是他们的名字而不是你的。如果他们哪天要求取回自己的数据,以其组织身份导出的内容只包含他们的行,不含其他任何客户的行,因为限定每一次读取的规则同样限定导出。
每位客户一开始就拥有的内容
多租户产品中,你本来要构建一次并永远维护的那些部分。
为其用户提供登录
注册、密码、一次性验证码、社交账号和 OIDC,使用客户自己的域名。
使用他们的名称
按组织设置徽标、颜色、发件人名称和支持邮箱,用于其用户看到的界面和邮件。
每位客户一个密钥
限定于某一位客户的密钥无法被引导到其他任何地方,无论请求怎么写。你的后台只持有一个密钥,并在每次请求中指明客户。
账户内的角色
你在配置中声明客户角色,这样你客户自己的团队就有管理员和成员,而你无需构建权限系统。
计量他们的用量
按客户在滚动时间窗口内为某个操作设置配额,并根据他们所在的分群进行限制,所用受众与为其内容做个性化的受众相同。
形态一致的环境
一份配置指定一个预发布项目和一个生产项目,使 schema 变更在到达客户之前先在安全的地方演练。
按客户统计用量
按组织统计记录、媒体、活跃用户和邮件数量,每项都有可设置的上限,你可以查看并限制每位客户的用量。
后台工作
按组织运行操作、定时计划和事件钩子,带有重试和运行记录。
媒体
资源库支持转换和响应式渲染版本,并对文件设有访问规则。