ファイル: Rails — ActiveLdap - ActiveLdap

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