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