【发布时间】:2012-02-15 08:26:03
【问题描述】:
我们正在构建一个产品支持应用程序。这个想法是拥有多个子域,每个子域都用于支持其他组织的产品。我们称之为账户——每个账户都与一个子域绑定。 用户也有角色 - 但是,用户可以在 account1 上拥有一个角色,在 account2 上拥有另一个角色。
基本上有两个问题:
1) 许多验证基于当前用户的角色。由于它依赖于 current_account(即会话数据),因此我无法在模型中进行此类验证。这让我看到了一些丑陋的控制器代码(丑陋,在某种意义上它真的感觉不合适)。我想在模型类变量中存储 current_account,但我读到这不是线程安全的。有什么建议吗?
2) 几乎每条数据库记录都特定于当前帐户;因此,几乎每个表都应该有一个 account_id 列,并且模型应该有一个 belongs_to 帐户关联。我想避免这种情况。第一件(显而易见的)事情是为每个帐户建立一个单独的数据库,但是
a) 有共享表
b) 老板说这个方案不能接受(会有很多账号,用户数量比较少)。还有第三种方法吗?
【问题讨论】:
-
您是否在使用任何类型的权限管理 gem?它们可能有助于减轻编写重复权限检查的痛苦,并添加一些有用的助手。
-
@DevinM - 是的,我正在使用 CanCan(这很棒),但它也从会话数据中获取信息(当前用户可以做什么),所以我不知道它如何帮忙?
标签: ruby-on-rails validation session subdomain multi-tenant