首先是我的模型结构:
公司拥有众多用户,用户属于公司
model1属于公司,公司有很多model1
model2属于公司,公司有很多model2
对于model1的索引动作我只是做了类似
的事情@model1 = current_user.company.model1s # i use devise for auth
在我的控制器中我先放
before_filter :authenticate_user!
问题是,show动作(当然)显示每个登录用户的每个模型1的记录。
将model1和model2记录仅限于属于model1和model2所属公司的用户的最佳选择是什么?
谢谢!
答案 0 :(得分:1)
在一般情况下,使用插件或类似宝石(无特定顺序)CanCan,Clearance或其中一个here。对于它的价值,我过去曾成功使用acl9。
这些解决方案中的大多数在控制器/视图级别实现授权控制,并以这种方式控制对特定模型实例(数据库中的AKA行)的访问。
另见this question,其中涵盖了最佳主题的主题。
最后,如果您想推广自己的,最简单的解决方案是在您的查询中从model1
和model2
加入company
和user
。根据您的说明,model1
和model2
列有company_id
列,company
列有user_id
列。根据您在模型中设置关联的方式,您可以执行以下操作:
Model1.joins(:company => :user).where(:users => {:id => 1})
或(假设适当的身份验证框架):
Model1.joins(:company => :user).where(:users => {:id => current_user.id})