ruby-on-rails - 为数据库中的多个客户端创建 "walled gardens"的最佳方法是什么?

标签 ruby-on-rails ruby activerecord

我正在建立一个 SaaS 风格的网站,其中我将让多个客户在同一个站点上管理他们的工作流程和数据,因此也管理同一个数据库。

我什至不确定这个概念是否有一个词,但是是否有任何既定的自动分离数据的方法,以便对数据库的任何 ActiveRecord 调用都被用户的正确 client_id 过滤/限制已登录?

当然,最直接的方法是在每个 ActiveRecord 请求的末尾添加一个“where client_id = ?”并将用户的客户端 ID 放入...。

模型是否有任何前置过滤器的想法,以便任何查找方法(包括动态方法)都会自动将 client_id 添加到它们?所以我可以只执行 Model.find_by_what_I_want(foo),即使我没有明确指定它,它也会自动知道将其限制为仅由正确的客户端 ID 拥有的记录?

最佳答案

如果您使用的是 Rails 2.3+,您可以享受默认作用域:

class Model < ActiveRecord::Base
  default_scope :conditions => ['client_id = ?', client_id]
end

您必须确保 client_id 已在初始化进程的某处设置。

这将确保该模型中的所有数据库查询都使用 client_id 条件。

关于ruby-on-rails - 为数据库中的多个客户端创建 "walled gardens"的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/722667/

相关文章:

ruby-on-rails - 为什么 Rails 以 UTC 存储时间?

ruby-on-rails - unicorn 和 nginx 的奇怪问题导致 502 错误

mysql - 试图查询 rails 数据库

ruby-on-rails - 在不同服务器上使用 Rails 的 postgresql COPY 命令的问题

ruby-on-rails - Rails 2.3 和 minitest

ruby-on-rails - 在与 rails 的深层嵌套关联中查找记录

ruby-on-rails - ActiveRecord::Base before_validation with conditional not triggered

ruby - 在 Ruby 中,我需要在类内还是类外?

ruby - 如何在没有用户名和密码的情况下访问代理?

ruby - 如何使用 has_many 更新连接模型 :through association?