我的模型包含一个“管理”字段,它是真或假。它不在“attr_accessible”上,因为我们不希望坏人能够欺骗我们的控制器向用户提供“管理员”权限。
因为,如果我在我的模型中以管理员身份登录,我“确实”希望能够更新任何用户的记录以创建或取消他们的管理员。所以......管理员缺少 attr_accessible 阻止我这样做。
也许这不是看待它的正确方式。处理这种情况的正确方法是什么?
我的模型包含一个“管理”字段,它是真或假。它不在“attr_accessible”上,因为我们不希望坏人能够欺骗我们的控制器向用户提供“管理员”权限。
因为,如果我在我的模型中以管理员身份登录,我“确实”希望能够更新任何用户的记录以创建或取消他们的管理员。所以......管理员缺少 attr_accessible 阻止我这样做。
也许这不是看待它的正确方式。处理这种情况的正确方法是什么?
Rails 3.2 添加了一个功能,可以让你做你所描述的事情。只需在您的模型中定义它:
attr_accessible accessible_attributes + [:admin], :as => :admin
然后在要分配 admin 属性的控制器中,执行以下操作:
User.new(params[:user], :as => :admin)
或者
user.update_attributes(params[:user], :as => :admin)
attr_accessible
在调用之前列出的所有属性都将是支持该选项:as => :admin
的任何 Active Record 调用的可访问属性。:as => :admin
如果您没有调用accessible_attributes
该定义,则只能访问那里定义的属性。