gpt4 book ai didi

ruby - 使用 devise 和 devise_ldap_authenticatable 在运行时检查组

转载 作者:数据小太阳 更新时间:2023-10-29 08:49:21 25 4
gpt4 key购买 nike

当我不关心它们是什么组时,我可以让这个 devise_ldap_authenticatable 正常工作,它要么连接到 ldap 并对在 devise 下登录的用户进行身份验证,要么不。但是我只想让属于一个或几个特定组的某些成员加入。我在这里发表了一篇关于这个问题的帖子:

Checking group membership in rails devise ldap gem, is it in the yaml?

(为了完整起见, gem 是这个:https://github.com/cschiewek/devise_ldap_authenticatable)

开始思考我问错了问题。我想我想知道如何设计(devise_ldap_authenticatable 是存储的数据,也许我可以自己查看我的 memberOf 数组并在代码中检查自己的组,然后在那个时候不要让它们进入。是网上有什么地方是这样的吗?我的谷歌搜索没有找到任何东西,但不是 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 处理重定向和错误消息,方法是在 Devise::LdapAdapter::LdapConnect ( https://github.com/cschiewek/devise_ldap_authenticatable/blob/master/lib/devise_ldap_authenticatable/ldap_adapter.rb ).它看起来像:

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 中的自定义初始化程序文件中。

关于ruby - 使用 devise 和 devise_ldap_authenticatable 在运行时检查组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17257728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com