修改设计 SAML 属性

Modify Devise SAML Attributes

我正在为我的帐户系统使用 Rails 4 和 Devise with Devise SAML Authenticatable。

我已经让 SAML 正常工作,但我正在努力解决一件事。

我想在保存之前更改其中一个 SAML 属性(因为它的格式不正确)。本质上,帐户的 SAML 请求被赋予一个 role 属性,它是以下 Group_adminGroup_consumerGroup_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

有谁知道这样做的方法吗?如果需要,我可以 post 任何其他代码,我只是不确定还需要什么。谢谢。

我能够执行以下操作来解决问题:

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 过滤器来正确设置 "real" 角色字段。