仅允许特定用户访问模型

时间:2011-12-17 12:24:53

标签: ruby-on-rails ruby ruby-on-rails-3 model-view-controller authentication

首先是我的模型结构:

  

公司拥有众多用户,用户属于公司

     

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所属公司的用户的最佳选择是什么?

谢谢!

1 个答案:

答案 0 :(得分:1)

在一般情况下,使用插件或类似宝石(无特定顺序)CanCanClearance或其中一个here。对于它的价值,我过去曾成功使用acl9

这些解决方案中的大多数在控制器/视图级别实现授权控制,并以这种方式控制对特定模型实例(数据库中的AKA行)的访问。

另见this question,其中涵盖了最佳主题的主题。

最后,如果您想推广自己的,最简单的解决方案是在您的查询中从model1model2加入companyuser。根据您的说明,model1model2列有company_id列,company列有user_id列。根据您在模型中设置关联的方式,您可以执行以下操作:

Model1.joins(:company => :user).where(:users => {:id => 1})

或(假设适当的身份验证框架):

Model1.joins(:company => :user).where(:users => {:id => current_user.id})