我可以让这个desve-ldap-authenticateable正常工作,当我不关心它们是什么组时,它要么连接到ldap,要么验证在desve下登录的用户,要么不验证。但是我只想让一个或多个特定组之外的某些成员进入。我在这里有一个关于这个问题的帖子:
Checking group membership in rails devise ldap gem, is it in the yaml?
(为了完整起见,宝石是这个:https://github.com/cschiewek/devise_ldap_authenticatable
我想我问错了问题。我想我想知道在devide中是如何实现的(devide_ldap_authenticatable是存储在哪里的数据,也许我可以在代码中查看我自己的成员数组并检查这些组,然后在那时不要让它们进入。网上有什么地方是这样的吗?我的谷歌搜索什么也没有找到,但不是一个LDAP或设计专业我猜我的条件很糟糕。
我确信我可能错过了如何做到这一点,我能看到的最接近这一点可能会有所帮助(尽管在我阅读时,它的形式对我来说没有什么意义,这里是自述文件的一部分:
https://github.com/cschiewek/devise_ldap_authenticatable/blob/master/README.md
关于查询LDAP,是这样吗?)

最佳答案

您可以通过对User模型(或等效模型)进行回调或验证来完成此操作。

before_create :user_is_not_member_of_specified_group?

private

def user_is_not_member_of_specified_group?
  member_of = Devise::LdapAdapter.get_ldap_param(self.username,"memberOf")
  test member_of
end

其中test是根据成员组的条件返回true/false的方法。
Devise::LdapAdapter.get_ldap_param(self.username,"memberOf")devise_ldap_authenticatable中返回成员组数组的方法。您需要在此阵列上运行组测试。
如果使用验证,则可以为测试失败的用户指定错误消息。希望这有帮助。
编辑
另一种处理方法是让gem通过monkeypatchingauthorized?中的Devise::LdapAdapter::LdapConnect方法来处理重定向和错误消息。看起来像是:
Devise::LdapAdapter::LdapConnect.class_eval do
  def user_group_test
    member_of = self.ldap_param_value("memberOf")
    test member_of # your group test method
  end

  def authorized?
    DeviseLdapAuthenticatable::Logger.send("Authorizing user #{dn}")
    if !user_group_test
      DeviseLdapAuthenticatable::Logger.send("Not authorized because custom authentication failed.")
      return false
    elsif !authenticated?
      DeviseLdapAuthenticatable::Logger.send("Not authorized because not authenticated.")
      return false
    elsif !in_required_groups?
      DeviseLdapAuthenticatable::Logger.send("Not authorized because not in required groups.")
      return false
    elsif !has_required_attribute?
      DeviseLdapAuthenticatable::Logger.send("Not authorized because does not have required attribute.")
      return false
    else
      return true
    end
  end

end

您需要将其放入config/initializers中的自定义初始值设定项文件中。

10-07 21:04