Rails
ActiveLdapはRails 3.1に対応しています。
インストール
Gemfileに以下のようなコードを追加するとインストールできます:
gem 'activeldap'
Net::LDAPまたはRuby/LDAPなどLDAPアダプタもインストールしなければいけません。以下の例ではRuby/LDAPを使っています:
gem 'ruby-ldap'
‘bundle install’を実行するとBundlerが自動的にgemをインストールします。
config/application.rbの他のrailtieの後にActiveLdapのrailtieも追加する必要があります:
require "active_ldap/railtie"
Configuration
環境毎に異なるLDAPの設定を利用できます。設定はRailsアプリケーションの設定ディレクトリ内の‘ldap.yml’というファイルに保存します。このファイルは環境毎のデータベース接続設定を保存する‘database.yml’ファイルと似た役割です。database.ymlと同様にldap.ymlファイルにはdevelopment, test, production環境用の設定を保存します。
以下のコマンドで‘config/ldap.yml’を生成できます:
% script/rails generate active_ldap:scaffold
active_ldap:scaffoldで生成された‘config/ldap.yml’を編集する必要があります。例えば、development環境の設定は以下のようになるでしょう:
development:
host: 127.0.0.1
port: 389
base: dc=localhost
bind_dn: cn=admin,dc=localhost
password: secret
アプリケーション起動時、現在の環境のパラメータを使ってActiveLdap::Base.setup_connectionが自動的に実行されます。
Model
ou=Users以下のエントリを表現するUserモデルを以下のコマンドで生成できます:
% script/rails generate model User --dn-attribute uid --classes person PosixAccount
以下のようなapp/model/user.rbが生成されます:
class User < ActiveLdap::Base
ldap_mapping :dn_attribute => "uid",
:prefix => "ou=Users",
:classes => ["person", "PosixAccount"]
end
app/model/user.rbを編集して関係設定を追加できます:
class User < ActiveLdap::Base
ldap_mapping :dn_attribute => 'uid',
:prefix => "ou=Users",
:classes => ['person', 'posixAccount']
belongs_to :primary_group,
:class_name => "Group",
:foreign_key => "gidNumber",
:primary_key => "gidNumber"
belongs_to :groups,
:many => 'memberUid'
end
以下のコマンドでGroupモデルも生成できます:
% script/rails generate model Group --classes PosixGroup
app/model/group.rb:
class Group < ActiveLdap::Base
ldap_mapping :dn_attribute => "cn",
:prefix => "ou=Groups",
:classes => ["PosixGroup"]
end
app/model/group.rbを編集して関連設定を追加できます:
class Group < ActiveLdap::Base
ldap_mapping :dn_attribute => "cn",
:prefix => "ou=Groups",
:classes => ["PosixGroup"]
has_many :members,
:class_name => "User",
:wrap => "memberUid"
has_many :primary_members,
:class_name => "Group",
:foreign_key => "gidNumber",
:primary_key => "gidNumber"
end
以下のコマンドでOuモデルも生成できます:
% script/rails generate model Ou --prefix '' --classes organizationalUnit
class Ou < ActiveLdap::Base
ldap_mapping :dn_attribute => "cn",
:prefix => "",
:classes => ["organizationalUnit"]
end