Navigation Menu

Skip to content

Instantly share code, notes, and snippets.

@thinkAmi
Created May 25, 2014 20:14
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save thinkAmi/a3ee427b1c64df204a52 to your computer and use it in GitHub Desktop.
Save thinkAmi/a3ee427b1c64df204a52 to your computer and use it in GitHub Desktop.
ActriveLdapのサンプルコード
require 'active_ldap'
HOST_IP_V4 = '192.168.0.1'
BIND_USER_CN = 'ふがふが'
BIND_USER_OU = ''
BIND_USER_PASSWORD = 'fugafuga'
def create_ou_string
BIND_USER_OU.empty? ? '' : "ou=#{BIND_USER_OU},"
end
# ENV['USERDNSDOMAIN']には、example.localという形で入っている
domain = ENV['USERDNSDOMAIN'].split('.')
base = "dc=#{domain[0]},dc=#{domain[1]}"
bind_user = "cn=#{BIND_USER_CN},#{create_ou_string}#{base}"
# 今回の範囲内では、Bindするユーザーは「Domain users」グループでも構わない
ActiveLdap::Base.setup_connection host: HOST_IP_V4,
port: 636,
method: 'ssl',
base: base,
bind_dn: bind_user,
password: BIND_USER_PASSWORD
class LdapUser < ActiveLdap::Base
# OU'hoge'内に制限するなら、prefixに 'hoge' を渡す
ldap_mapping dn_attribute: 'cn', prefix: ''
def member?(group)
# 見つからない場合、Array#indexはnilを返すのを利用
result = self.memberOf.index do |m|
m.rdns.index { |r| r.has_value?(group) }
end
!result.nil?
end
end
# ドメイン内ではユーザーログオン名は一意になるため、 :firstを指定しておく
# CNで探す場合
user1 = LdapUser.find(:first, 'fuga_cn')
p user1.memberOf
if user1.member?('hogehoge')
puts 'CNで検索し、所属を確認しました'
else
puts 'CNで検索し、所属を確認できませんでした'
end
# ログオン名で探す場合
user2 = LdapUser.find(:first, filter: '(sAMAccountName=fuga_logon)')
p user2.memberOf
if user2.member?('hogehoge')
puts 'ユーザーログオン名で検索し、所属を確認しました'
else
puts 'ユーザーログオン名で検索し、所属を確認できませんでした'
end
source 'https://rubygems.org'
gem 'activeldap'
gem 'net-ldap'
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment