attr_accessible,attr_accessor,我想知道他们做了什么

时间:2012-09-19 02:42:54

标签: ruby-on-rails attr-accessible attr-accessor

我正在Rails和面向对象编程中完成我的第一步。 我想了解一些非常有用的东西:为什么我们在模型中需要attr_accessible

我已经读过,黑客可以使用批量分配来更改数据库条目,从而确保安全性,这就是敏感字段需要保护的原因(在这种情况下使用atribute_protected)。

attr_accessibleatribute_protected相反吗?如果是这样,为什么我们需要说明哪些字段可访问哪些字段不可访问?是不是可以通过defult访问的那些字段?什么是attr_accessor用于?

我注意到如果我不使某些字段不可访问,我的应用程序就无法运行。我可以对敏感字段使用attr_acessible:password_digest和:admin?

如果有人能向我解释,那就太棒了。

一切顺利, TimmyOnRails

1 个答案:

答案 0 :(得分:3)

你在这里混合了几个概念,所以我会尝试解开它们。

attr_accessor用于设置可读写属性。它相当于说attr_readerattr_writer。由于您的问题不是直接与attr_accessor有关,因此我不会在Accessors上查看此链接后再解决此问题。


根据Rails文档: attr_accessible与attr_protected宏相反

您是正确的,这些方法用于防止批量分配漏洞。

  • attr_accessible说明可以通过质量分配设置哪些属性。
  • attr_protected说明通过质量分配设置不能的属性。

那么每个用例的用途是什么?在一种情况下,您可以设置一个全局配置选项,使其必须声明所有属性attr_accessible

config.active_record.whitelist_attributes = true

在这种情况下,您经常使用attr_accessible

attr_protected?如果您采用相反的方式并在白名单属性上说false,您将如何声明哪些属性不应该是可分配的?如果你说attr_protected你是对的! :d

通常,您希望将:admin等字段设置为attr_protected,因为您不希望攻击者进入并将其权限升级为管理员角色。

群发作业并不容易。大而聪明的开发团队已经弄错了。仔细一点,确保你了解发生了什么!