第8章
この章では、ユーザ属性によるプロファイル作成について説明します。この章は、次の節で構成されています。
「属性」は、ユーザプロファイル内の個々のデータアイテムです。各属性は、(データベース用語では)カラムまたはフィールドに対応します。
属性は、ユーザに関連付ける任意のデータです。Userサブシステムには組み込み属性のセットがあり、ユーザプロファイルに対して独自のユーザ属性を作成および使用できます。
次の組み込み文字列属性は、レルム設定に関係なく、各ユーザプロファイルで提供されています。
User IDおよびUserUUID属性の値は、多くのexteNd Director APIパッケージでユーザの識別に使用されます。
新規ユーザポートレット 新規ユーザポートレットは、exteNd DirectorプロジェクトのカスタムWebアプリケーションで使用されるコアポートレットです。このコンポーネントを使用すると、ユーザを書き込み可能レルムに追加して、新しい各ユーザのプロファイルを自動的に作成できます。このプロファイルには、組み込み属性が含まれています。
詳細については、新規ユーザポートレットについてを参照してください。
書き込み可能な非LDAPレルムを使用するアプリケーションは、アプリケーションデータベースを使用してプロファイル情報を保存します。デフォルトでは、データベース内のプロファイルには、組み込み属性のみが含まれます。これらのアプリケーションは、必要に応じてカスタム属性を作成できます。
例については、属性の作成(非LDAP)を参照してください。
LDAPレルムを使用するアプリケーションは、LDAPディレクトリを使用してプロファイル情報を保存します。LDAPは、ほとんどのWebアプリケーションの要件を満たす豊富な属性セットを提供します。新しい(カスタム)属性をディレクトリに追加するには、LDAP管理コンソールを使用します。
注記: exteNd DirectorアプリケーションからLDAPディレクトリにカスタム属性を追加することはできません。
User APIは、使用できるすべてのLDAP属性のリストをアプリケーションで取得するための方法を備えています。EARウィザードの[ユーザLDAPオプション]パネルでは、ユーザAPIに対して、特定の属性を有効にし、他の属性を無効にすることができます。また、特定の構文定義を無効にすることもできます。
詳細については、exteNd Directorアプリケーションの開発のLDAPユーザオプションに関する節を参照してください。
各属性には、名前、説明、表示プロパティ、およびデータタイプがあります。
各属性には、次の2つのうちいずれかの値を指定できる表示プロパティがあります。
|
属性の使用 |
説明 |
|---|---|
|
表示可能 |
個人データや環境設定など、ユーザから直接収集する情報。通常、ユーザは、この情報を登録フォームで指定します。 |
|
非表示 |
購入パターンやクリックストリームカウントなど、ユーザにより明示的には提供されていないが、保存されている情報。 |
属性データ値には、次の2種類があります。
BLOB属性は、大きなドキュメントやイメージなど、バイト配列形式のバイナリデータの保存に使用されます。BLOB属性を使用するために、独立したAPIメソッドが提供されています。
注記: User APIは、LDAPレルムを使用するアプリケーションの複数値属性をサポートしています。DAC (Director Administration Console)でも、これらの属性の既存値を表示および変更できます。
必要な任意の属性を定義し、これらをコードで使用してコンテンツをパーソナライズできます。この節では、コンポーネントから属性にアクセスする方法、およびカスタム属性の作成と設定の方法について説明します。
User APIの概要については、APIを使用したプロファイルへのアクセスを参照してください。
DACを使用した属性へのアクセス DAC (Director Administration Console)を使用してユーザ属性にアクセスすることもできます。
次のコードは、ユーザプロファイルを取得して、すべてのカスタム属性を表示する方法を示します。EbiUserInfoオブジェクトに、各組み込み属性用の特定のメソッドがあります。
import com.sssw.fw.usermgr.api.*;
import com.sssw.fw.usermgr.client.*;
try {
//
// Get the user identifier.
//
String userUUID = EboUserHelper.getUserUUID(context);
//
// Get a user delegate object from the factory.
//
EbiUserDelegate userDelegate = EboFactory.getUserDelegate();
//
// Get a user info object.
//
EbiUserInfo userInfo =
(EbiUserInfo)userDelegate.
getUserInfoByUserUUID(context,userUUID);
//
// Get the registration info and add to output buffer.
//
sb.append("UserID:" + userInfo.getUserID() + "<br>");
sb.append("UserUUID:" + userInfo.getUserUUID() + "<br>");
sb.append("UserFirstName: " +
userInfo.getUserFirstName() + "<br>");
sb.append("UserLastName: " +
userInfo.getUserLastName() + "<br>");
sb.append("UserEmailAddress: " +
userInfo.getUserEmailAddress() + "<br>");
//
// Get a user metadelegate object from the factory.
//
EbiUserMetaDelegate userMetaDelegate = EboFactory.getUserMetaDelegate();
//
// Get the current user\qs metadata.
//
EbiUserMeta userMeta = userMetaDelegate.getUserMeta(context);
if (userMeta == null) {
userMeta = userMetaDelegate.createUserMeta();
userMetaDelegate.addUserMeta(context, userMeta);
}
else {
//
// Get all custom attribute names and values.
// Add to output buffer.
//
String[] attributes = userMeta.getUserAttributes();
if (attributes == null) {
sb.append("No attributes - string array is null");
}
else {
for (int i=0;i<attributes.length;i++) {
String attributeValue =
userInfo.getAttributeValue(context,attributes[i]);
sb.append(attributes[i] + ": " +
attributeValue + "<br>");
}
}
}
}
catch (EboFactoryException e) { sb.append( e.getMessage() ); }
catch (EboSecurityException e) { sb.append( e.getMessage() ); }
注記: カスタム属性を持たないプロファイルに対してこのコードを実行した場合、EbiUserMetaオブジェクトはNULLになります。
特定の属性値をLDAPディレクトリから直接取得するには、次のメソッドを使用します。
EboUserHelper.getDirectoryUserAttributes(context, userdn, String[] names)
このメソッドは、値が返される属性の名前を指定する文字列のコンテキスト、ユーザDN文字列、および配列を入力します。戻り値は、要求した各ユーザ属性の値が含まれるMap(オブジェクト配列)です。
注記: このメソッドは、複数値属性の最初の値だけを返します。
LDAPディレクトリを使用する場合、属性には複数の値が含まれる可能性があります。このような属性を確認するには、次のメソッドを使用します。
EbiUserMeta.isUserAttributeSingleValued(attrname)
このメソッドは、指定した属性が単一値に制限されているかどうかを示すブール値を返します。
次のコードは、カスタム属性をユーザプロファイルに追加します。
import com.sssw.fw.usermgr.api.*;
try {
//
// Get a user metadelegate object from the factory.
//
EbiUserMetaDelegate userMetaDelegate = com.sssw.fw.usermgr.client.
EboFactory.getUserMetaDelegate();
//
// Get a writable copy of the user metadata.
//
EbiUserMeta userMeta = userMetaDelegate.getClonedUserMeta(context);
//
// Add a custom attribute
//
String attrib_name = "Employer";
userMeta.addUserAttribute(attrib_name,"Name of employer",true);
//
// Save the modified metadata including the new attribute.
//
userMetaDelegate.modifyUserMeta(context,userMeta);
//
// Return the attribute name and value.
//
sb.append("Added attribute:" + attrib_name);
}
catch (EboFactoryException e) { sb.append( e.getMessage() ); }
catch (EboSecurityException e) { sb.append( e.getMessage() ); }
次のコードは、カスタム属性の値を設定します。
import com.sssw.fw.usermgr.api.*;
try {
//
// Get a user delegate object from the factory.
//
EbiUserDelegate userDelegate =
com.sssw.fw.usermgr.client.EboFactory.getUserDelegate();
//
// Get a user info object from the factory.
//
EbiUserInfo userInfo = com.sssw.fw.usermgr.client.EboUserHelper.
getUserInfo(context);
//
// Set the value of the attribute to Novell.
//
String attrib_name = "Employer";
userInfo.setAttributeValue(context, attrib_name, "Novell");
//
// Write the new value into the user info object.
//
userDelegate.modifyUser(context,userInfo);
//
// Get the new attribute value and append to output buffer.
//
sb.append(attrib_name + ": " +
userInfo.getAttributeValue(context, attrib_name));
}
catch (EboFactoryException e) { sb.append( e.getMessage() ); }
catch (EboSecurityException e) { sb.append( e.getMessage() ); }
Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...