我正在为我的帐户系统使用 Rails 4 和 Devise 以及 Devise SAML Authenticatable。
我已经让 SAML 正常工作,但我正在尝试解决一件事。
我想在保存之前更改 SAML 属性之一(因为它的格式不正确)。本质上,帐户的 SAML 请求被赋予一个 role
属性,该属性是以下 Group_admin
、Group_consumer
、Group_supplier
之一。我的 Account
模型中有一个 role
字段,枚举如下:
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
有谁知道有什么方法可以做到这一点吗?如果需要,我可以发布任何其他代码,我只是不确定还需要什么。谢谢。
最佳答案
我能够执行以下操作来解决该问题:
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
过滤器来正确设置“真实”角色字段。
关于ruby-on-rails - 修改设计 SAML 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31800355/