我正在建立一个 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/