Ruby on rails 是否有一个';声明性';如何授权可以更改模型的哪些属性?

Ruby on rails 是否有一个';声明性';如何授权可以更改模型的哪些属性?,ruby-on-rails,activerecord,model,authorization,Ruby On Rails,Activerecord,Model,Authorization,使用attr_accessible是不够的,因为它要么打开,要么关闭 有些模型有用户表单,也有管理员表单。对于管理员来说,他们需要能够批量分配的属性需要在attr_中可访问,但这意味着普通用户可能会恶意注入这些参数。在管理端手动分配所有内容似乎需要做很多工作,并且可以访问普通用户可以更改的属性 是否有以rails为中心的标准解决方案来解决此问题?也许是宝石 我的设想是这样的: model.update_attributes_with_user(params[:model], user) 您需要

使用attr_accessible是不够的,因为它要么打开,要么关闭

有些模型有用户表单,也有管理员表单。对于管理员来说,他们需要能够批量分配的属性需要在attr_中可访问,但这意味着普通用户可能会恶意注入这些参数。在管理端手动分配所有内容似乎需要做很多工作,并且可以访问普通用户可以更改的属性

是否有以rails为中心的标准解决方案来解决此问题?也许是宝石

我的设想是这样的:

model.update_attributes_with_user(params[:model], user)

您需要可访问的
属性的
:as
选项

有关更多信息和示例,请参阅

不过,作为一个快速示例(从链接):


我建议您阅读这篇关于在控制器中设置质量可分配属性的官方博客文章:

它还链接到帮助实现所谓切片模式(或其提取)的gem:


此解决方案允许您以不同方式指定用户控制器和管理员用户控制器中的可编辑属性。

这看起来仅在3.2中可用,为什么我必须在每个模型中定义assign_属性?这看起来像是拼凑在一起的。看起来他们增加了使用的能力:与attr_一样,可以访问,但不是在应用程序范围内实际使用它的干净方式。
 attr_accessible :name, :credit_rating, :as => :admin
 customer.assign_attributes({ "name" => "David", ... }, :as => :admin)