安全地建立模型关联

时间:2016-04-16 21:25:04

标签: ruby-on-rails ruby security associations belongs-to

我正在努力确保我的Rails应用程序能够安全地构建关联,而我不确定如何处理我通过另一个模型“拥有”模型的​​情况。

一个例子是我是一个有十几岁女儿的父亲。他们拥有一些苹果产品。产品在技术上属于他们,但我付出了所有 - 我拥有它。

此外,我不想让陌生人给我的女儿们新的苹果产品。

这个代码如下:

class Father
  has_many :teenage_daughters

  devise :database_authenticatable, :registerable,
         :recoverable, :rememberable, :trackable, :validatable
end

class TeenageDaughter
  belongs_to :father

  accepts_nested_attributes_for :apple_products, 
                                reject_if: :all_blank, 
                                allow_destroy: true # oh yeah
end

class AppleProduct
  belongs_to :teenage_daughter
  # Should i be doing something like this?
  # belongs_to :father 
end

我的问题是:

我是否应该在belongs_to内向父亲添加AppleProduct关系,并且每当我创建AppleProduct时,我设置current_user

我担心会犯错,并以某种方式允许精心设计的请求允许人们将行与不属于他们的用户帐户关联/取消关联。

1 个答案:

答案 0 :(得分:2)

让我引用你说过的话:

  

我为此付出了一切 - 我拥有它

这意味着c(18, 17)模型代表父亲拥有的资产,而你让某人(在这种情况下是孩子)使用它。在我看来,这是一个更接近现实生活模式的方式:

AppleProduct

通过这样做,您可以明确表示这些产品的class Father has_many :apple_products has_many :teenage_daughters end class TeenageDaughter belongs_to :father end class AppleProduct belongs_to :owner, class_name: 'Father' belongs_to :user, class_name: 'TeenageDaughter' end owner是谁。

此外,与您的问题无关,但请考虑将名称从user更改为TeenageDaughter