gpt4 book ai didi

ruby-on-rails - Rails 3.1 attr_accessible 验证接收角色数组

转载 作者:行者123 更新时间:2023-12-04 06:18:30 24 4
gpt4 key购买 nike

我想使用 rails 新的动态 attr_accessible 功能。但是,我的每个用户都有许多角色(我使用的是声明式授权)。所以我的模型中有以下内容:

class Student < ActiveRecord::Base

attr_accessible :first_name, :as=> :admin

end

我在我的 Controller 中传递了这个:
@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

此应用程序中有 2 个示例:尽管存在 'user_roles = [:admin, :student]',但 y 无法更新任何属性的学生;和我只能更改名字的人,因为我在 Controller 更新操作中使用了“user_roles.first”。希望这可以帮助。我确定其他人一定有这个问题。

最佳答案

你可以猴子补丁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 )

关于ruby-on-rails - Rails 3.1 attr_accessible 验证接收角色数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7507154/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com