加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

ruby-on-rails – Rails 3.1 attr_accessible验证接收一系列角色

发布时间:2020-12-17 02:00:06 所属栏目:百科 来源:网络整理
导读:我想使用rails new dynamic attr_accessible功能.但是我的每个用户都有很多角色(我使用的是声明式授权).所以我的模型中有以下内容: class Student ActiveRecord::Baseattr_accessible :first_name,:as= :adminend 我在我的控制器中传递了这个: @student.up
我想使用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)

但如果我只能验证一个角色或符号,那就没用了,因为我的所有用户都有很多角色.

任何帮助将不胜感激

*************** UPDATE ************************

您可以在此处下载示例应用:
https://github.com/jalagrange/roles_test_app

这个应用程序中有两个示例:尽管’user_roles = [:admin,:student]’,但y无法更新任何属性的学生;而且我只能更改名字的人因为我在控制器更新操作中使用“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

这样,您可以将数组作为update_attributes的:as选项传递

请注意,如果accessible_attrs_configs包含BlackList(来自使用attr_protected),这可能会中断

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读