Ruby on rails 限制数据可见性的方法

Ruby on rails 限制数据可见性的方法,ruby-on-rails,authentication,authorization,authlogic,denormalization,Ruby On Rails,Authentication,Authorization,Authlogic,Denormalization,好的,假设有以下db模式(关系): 表用户由Authlogic生成 我有2个注册用户,每个用户都有自己的客户,等等。使用Authlogic,我能够只允许经过身份验证的用户访问控制器/视图。这很好,这就是Authlogic的用途 现在我需要确保用户#1永远不会获得属于用户#2的客户的信息 换言之: 如果用户1转到,他将看到属于用户1的客户的汽车列表 如果id=131的汽车属于用户#1的客户,则只有用户#1才能访问此信息()。如果用户#2在浏览器中插入相同的链接,他就不必看到这些信息 有些人建议我在

好的,假设有以下db模式(关系):

表用户由Authlogic生成

我有2个注册用户,每个用户都有自己的客户,等等。使用Authlogic,我能够只允许经过身份验证的用户访问控制器/视图。这很好,这就是Authlogic的用途

现在我需要确保用户#1永远不会获得属于用户#2的客户的信息

换言之: 如果用户1转到,他将看到属于用户1的客户的汽车列表

如果id=131的汽车属于用户#1的客户,则只有用户#1才能访问此信息()。如果用户#2在浏览器中插入相同的链接,他就不必看到这些信息

有些人建议我在用户和每个db表之间创建一个关系,以便检查记录是否与当前用户关联

你觉得怎么样?最好的方法/解决方案是什么?

因此您有两件事:

  • 在cars控制器的索引页中,仅应显示属于当前用户的车辆
  • 您希望将显示页面限制为所有者
  • 至于指数,我建议如下:

    def index
      # find logic
      @cars = Car.find(:all,:conditions=>{:customer_id => current_user.customers.collect(&:id)})
      # whatever else
      # ...
    end
    
    和显示页面:

    def show
      # .....
      # after the find logic
      redirect_to :index unless current_user.customers.collect(&:id).include? @car.customer_id 
      # whatever else
      # ...
    end
    

    这种方法在大多数情况下都可以,但是更好的性能方法是在客户表中添加一个用户id列,这称为非规范化,但在性能方面是可以接受的。

    谢谢khelll。看起来db去规范化是接下来的方法。所以我需要在用户和每个表之间建立一个1->n关系(在本例中是在car和support中)。
    def show
      # .....
      # after the find logic
      redirect_to :index unless current_user.customers.collect(&:id).include? @car.customer_id 
      # whatever else
      # ...
    end