我从rails目录的活动目录中提取员工姓名。除了有一些'非真实的人'条目有一个cn =人,如'会议室'之外,它总体上起作用。我需要消除那些。我可以通过迭代过滤器连接来做到这一点,但这似乎非常低效和kludgy。
我现在拥有的是
filter1 = (Net::LDAP::Filter.ge( "sn", "a"))
filter2 = Net::LDAP::Filter.eq( "givenName", "c*" )
filter3 = Net::LDAP::Filter.ne("samaccountname", "croom" )
treebase = "dc=xxxxxx,dc=com"
joined_filter = Net::LDAP::Filter.join(filter1, filter2)
joined_filter = Net::LDAP::Filter.join(joined_filter, filter3)
@temp_search = ldap.search( :base => treebase, :filter => joined_filter )
这给了我所有员工的姓氏大于或等于'a'(我知道需要调整)和给定名称以'c'开头。 Filter3不包括会议室“croom”。似乎应该有一些方法将数组传递给过滤器。如果我尝试将所有三个过滤器传递给一个连接,我得到一个“错误的参数数量”
有没有办法通过多个排除项目,例如'croom''croom2''breakroom'等?
答案 0 :(得分:2)
使用Net::LDAP
库似乎无法像您建议的那样将数组传递给Net::LDAP::Filter
对象。但是,您可以使用类#&
方法加入过滤器。
类似的东西:
filter1 = Net::LDAP::Filter.ge( "sn", "a")
filter2 = Net::LDAP::Filter.eq( "givenName", "c*" )
filter3 = Net::LDAP::Filter.ne("samaccountname", "croom" )
treebase = "dc=xxxxxx,dc=com"
joined_filter = filter1 & filter2 & filter3
@temp_search = ldap.search(:base => treebase, :filter => joined_filter)
或者好一点:
filters = Net::LDAP::Filter.ge( "sn", "a") &
Net::LDAP::Filter.eq( "givenName", "c*" ) &
Net::LDAP::Filter.ne("samaccountname", "croom" )
treebase = "dc=xxxxxx,dc=com"
@temp_search = ldap.search(:base => treebase, :filter => filters)
查看net ldap过滤器class,您可以看到一些其他方便的方法。