为了在rails 4.2项目上向后兼容,我使用的是protected_attributes
gem。在User
模型上,我有以下声明
enum access_level: [:general, :marketing, :admin]
如果我尝试user.admin!
,我会收到以下错误:
ActiveModel::MassAssignmentSecurity::Error: Can't mass-assign protected attributes for User: access_level
这可以通过声明来解决
attr_accessible :access_level
但我不想让用户有潜力为自己管理角色。是否有一种简单的方法可以继续使用protected_attributes
gem和枚举,并阻止用户授予自己管理员角色。
答案 0 :(得分:2)
我的解决方法如下。我确保只有:admin角色可以在access_level
;
attr_accessible :access_level, as: :admin
然后定义了以下方法
def set_admin
update({access_level: 2}, as: :admin)
end
用于代替admin!
。所有其他只读枚举方法(例如admin?
或Admin.admin
)都可以使用。可以为其他枚举可能性定义类似的方法。当应用升级为使用strong_parameters时,应该很容易进行搜索并替换以使用admin!
。