基于会话数据的验证,在子域之间共享数据

时间:2012-01-20 19:49:00

标签: ruby-on-rails validation session subdomain multi-tenant

我们正在构建产品支持应用程序。我们的想法是拥有多个子域,每个子域用于支持其他组织产品。我们称之为帐户 - 每个帐户都与一个子域绑定。 用户也有角色 - 但是,用户可以在account1上拥有一个角色,在account2上拥有其他角色。

基本上,有两个问题:

1)许多验证都基于当前用户的角色。由于它依赖于current_account(即会话数据),因此我无法在模型中进行这些验证。这导致我一些丑陋的控制器代码(丑陋,从某种意义上说,它真的感觉不合适)。我想到在模型类变量之后存储current_account,但我读到这不是线程安全的。有什么建议吗?

2)几乎每个数据库记录都是特定于当前帐户的;所以,几乎每个表都应该有一个account_id列,模型应该有一个belongs_to帐户关联。我想避免这种情况。第一个(显而易见的)是为每个帐户建立一个单独的数据库,但是

a)有共享表

b)老板说这个解决方案是不可接受的(会有很多帐户,用户数量相对较少)。还有第三种方式吗?

1 个答案:

答案 0 :(得分:0)

如果有人遇到类似的问题: 描述的问题称为multitenancy;理解default_scope应该有所帮助。另外,multitenant gem很适合我。