看看是否有一些关于如何引入有效“联合”数据的登录“用户”想法的想法......让我解释一下。
到目前为止,我一直在构建我的应用程序,如果只有一个用户。我。所有数据和报告都是我特有的。我刚刚添加了authlogic。
我现在希望能够为新用户引入一种登录方式,而不是查看我的任何数据,并使用该应用程序。并最终支付使用该系统。
到目前为止,我的假设是我必须进入模型并为每个模型添加一个user_id,然后转到所有控制器并按用户进行搜索。
但我想知道是否有更好的方法为每个用户联合数据的宝石,建议和想法。
哦......我可能希望允许多个用户访问属于另一个用户的部分或全部数据。这适用于可能想要分享的小型销售团队。
所以...在我尝试摸索自己之前的想法......谢谢你:)
答案 0 :(得分:2)
你有正确的想法。您必须在用户和数据模型之间建立关系。在某些情况下,它可能很简单belongs_to :user
,但如果您希望多个用户访问某些数据,那么它必须是多对多关系has_and_belongs_to_many :users
。
然后,我们只是改变了获取数据的方式:
# Some controller, no restrictions
def index
@reports = Report.all
end
def view
@report = Report.find(params[:id])
end
# Some controller, with restrictuons
def index
@reports = current_user.reports.all
end
def view
@report = current_user.reports.find(params[:id])
end
使用上述逻辑,用户只能看到与他们有关系的数据。
如果你已经创建了大部分应用程序,毫无疑问,它可能会有点工作。你必须真正,真的,真的小心谨慎,不要留下任何Report.all
或Report.find(params[:id])
,因为这会导致漏洞 - 用户将能够访问实际上不属于他们的数据。
答案 1 :(得分:0)
您所谈论的内容称为ACL(访问控制列表)。 Rails有许多插件可以为您完成大部分工作。谷歌周围,看看你是否能找到一个符合你需求的。
编辑:快速浏览后,Acl9似乎是最受欢迎的Rails 3兼容产品。