2015-05-20 77 views
3

我試圖讓用戶登錄誰在組1或組2中出席 ,但在LDAP授權期間它正在檢查兩組。ldap設備中的多個組進行身份驗證

如果用戶存在於group1或group2中,我需要允許他們登錄。

有人可以協助嗎?

在devise.rb

config.ldap_check_group_membership =真

在ldap.yml

authorizations: &AUTHORIZATIONS 

    group_base: ou=groups,dc=test,dc=com 

required_groups: 

    cn=admins,ou=groups,dc=test,dc=com -----group1 

    cn=users,ou=groups,dc=test,dc=com ----- group2 

require_attribute: 

# objectClass: inetOrgPerson 
# authorizationRole: postsAdmin 

development: 
    host: # ip address is to be filled in here.. 
    port: # port number goes here.. 
    attribute: cn 
    base: # my tree base details go in here.. 
    admin_user: cn=admin_name,dc=test,dc=com 
    admin_password: # password goes in here.. 
    ssl: true 
    <<: *AUTHORIZATIONS 
+0

也許是一個愚蠢的問題,但也都是管理員用戶?如果是這樣,您可以刪除其中一項要求。或者將管理員添加到用戶並刪除管理員組。只要你在require部分有兩個組,它就需要兩個組的成員資格。 –

回答

0

,只有4月中下旬,但任何人仍面臨這種情況,可以在猴子寶石

module Devise 
    module LDAP 
    class Connection 
     def in_required_groups? 
     found = false 
     return true unless @check_group_membership 
     return false if @required_groups.nil? 
     for group in @required_groups 
      if group.is_a?(Array) 
      found = true if in_group?(group[1], group[0]) 
      # return false unless in_group?(group[1], group[0]) 
      else 
      found = true if in_group?(group) 
      # found = true if in_group?(group[1], group[0]) 
      end 
     end 
     return found 
     end 
    end 
    end 
end 
1

/devise_ldap_authenticatable-0.8.3/lib/devise_ldap_authenticatable/ldap/connection.rb修補一個方法

def in_required_groups? 
    return true unless @check_group_membership 

    ## FIXME set errors here, the ldap.yml isn't set properly. 
    return false if @required_groups.nil? 

    arr_res = [] 
    for group in @required_groups 
     if group.is_a?(Array) 
     res = in_group?(group[1],group[0]) 
     arr_res << res 
     # return false unless in_group?(group[1], group[0]) 
     else 
     return false unless in_group?(group) 
     end 
    end 
    DeviseLdapAuthenticatable::Logger.send(arr_res) 
    return true if arr_res.include? true 
    # return true 
    end