我正在为我的帐户系统使用Rails 4和Devise with Devise SAML Authenticatable。
我已经完成了SAML的工作,但我正在努力解决一件事。
我想在保存之前更改其中一个SAML属性(因为格式不正确)。从本质上讲,帐户的SAML请求被赋予role
属性,该属性是以下Group_admin
,Group_consumer
,Group_supplier
之一。我的role
模型中的Account
字段列举如下:
enum role: [:admin, :consumer, :supplier]
显然,我无法直接设置role
,因为Group_admin != admin
(等)。有没有办法修改Devise
保存字段之前给出的SAML属性?
我尝试过before_save
过滤器无济于事。
before_save :fix_role!
private
def fix_role!
self.role = self.role.split('_')[1]
end
有谁知道这样做的方法?如有必要,我可以发布任何其他代码,我只是不确定还需要什么。感谢。
答案 0 :(得分:1)
我能够执行以下操作来解决问题:
attribute-map.yml
"role": "full_role"
account.rb
before_save :set_role!
attr_accessor :full_role
private
def set_role!
self.role = self.full_role.split('_')[1]
end
基本上,我使用attr_accessor
来存储从SAML响应和before_save
过滤器给出的格式不正确的角色,以正确设置"真实"角色领域。