我想使用rails new dynamic attr_accessible功能。但是我的每个用户都有很多角色(我使用的是声明式授权)。所以我的模型中有以下内容:
class Student < ActiveRecord::Base
attr_accessible :first_name, :as=> :admin
end
我在控制器中传递了这个:
@student.update_attributes(params[:student], :as => user_roles)
user_roles是一个符号数组:
user_roles = [:admin, :employee]
我希望我的模型检查数组中的一个符号是否与声明的attr_accessible匹配。因此,我避免任何重复。
例如,假设user_roles = [:admin,:employee]。这有效:
@student.update_attributes(params[:student], :as => user_roles.first)
但如果我只能验证一个角色或符号,那就没用了,因为我的所有用户都有很多角色。
非常感谢任何帮助
的 的 ** * ** * ** * 的** * *** 更新的 * ** * ** * ** * ** * ** * ** * ** * **
您可以在此处下载示例应用: https://github.com/jalagrange/roles_test_app
这个应用程序中有两个示例:尽管'user_roles = [:admin,:student]',但y无法更新任何属性的学生;而且我只能更改名字的人因为我在控制器更新操作中使用“user_roles.first”。希望这可以帮助。我相信别人一定有这个问题。
答案 0 :(得分:1)
您可以按如下方式修补ActiveModel's mass assignment module:
# in config/initializers/mass_assignment_security.rb
module ActiveModel::MassAssignmentSecurity::ClassMethods
def accessible_attributes(roles = :default)
whitelist = ActiveModel::MassAssignmentSecurity::WhiteList.new
Array.wrap(roles).inject(whitelist) do |allowed_attrs, role|
allowed_attrs + accessible_attributes_configs[role].to_a
end
end
end
这样,您可以将数组作为:as
选项传递给update_attributes
请注意,如果accessible_attrs_configs
包含BlackList
(使用attr_protected
)