第4章
この章では、ACLベースのセキュリティを使用してCM (コンテンツ管理)サブシステム要素へのアクセスを認証する方法について説明します。この章は、次の節から構成されています。
注記: この章で説明するセキュリティタスクのほとんどは、CMサブシステムを使用して実現することもできます。
ACLベースのセキュリティで簡単に説明されているように、CMサブシステムでは、ACLベースのセキュリティをサポートしています。アクセス制限は、ユーザIDまたはグループメンバーシップに基づいて、CMサブシステムのほとんどのオプジェクトにおいて指定できます。アクセス制限は、次に対して使用できます。
包括的なセキュリティポリシーでは、さまざまなユーザの役割に対し、それぞれ異なる許可を設定する必要があります。CMサブシステムでの一般的な役割は次のとおりです。
役割 |
説明 |
---|---|
作成者 |
ドキュメントに対してreadおよびwriteアクセスがあり、フォルダおよびカテゴリに対してread、write、およびlistアクセスがあります。 |
発行者 |
ドキュメントに対してpublishアクセスがあり、フォルダおよびカテゴリに対してlistアクセスがあります。 |
管理者 |
すべてのオブジェクトに対してすべてのアクセス権があります。ユーザは、EbiContentAdminインタフェースに割り当てられたACLによって少なくとも1つの許可が与えられている場合、管理者とみなされます。ContentAdminグループを参照してください。 |
exteNd Directorのユーザおよびグループを設定する際には、ユーザがこれらの役割にどのように属するかを考慮し、適切なグループを作成します。これらのユーザIDおよびグループを使用して、セキュリティが実装されるACLを作成できます。CMサブシステムを通して取得および再使用できるマスタACLを作成することもできます。
Director管理コンソール(DAC)を使用すると、ユーザおよびグループを設定できます。
詳細については、『ユーザ管理ガイド』のDACのディレクトリセクションの使用に関する章を参照してください。
CMオブジェクトにおけるアクセスの制限は、ACL (アクセス制御リスト)を使用することによって指定します。ACLに対するサポートを提供するために、exteNd Directorによってjava.security.acl.Aclインタフェースが実装されます。セキュリティ保護が可能な各「要素」には、サポートされているアクセス権タイプまたは「許可」のセットがあります。サポートされている許可は、各オブジェクトのインタフェースで文字列定数として定義されます。
この節では、CMオブジェクトにアクセス制限を指定するためのACLの使用について説明します。
exteNd DirectorアプリケーションでのACLの使用の一般的な情報については、『ユーザ管理ガイド』のACLベースのセキュリティに関する章を参照してください。
CMサブシステムに対して定義される許可には次のものが含まれます。
サブシステムのセキュリティ保護が可能な要素タイプ(セキュリティ保護が可能な一部のスーパインタフェースを除く)およびサポートされている許可は、次の表のとおりです。
EbiContentAdminインタフェースは、組み込みのコンテンツ管理者グループを表します。このグループに追加されるユーザには、サブシステム管理に対して指定されたアクセスがあります。使用可能な許可は次のとおりです。
許可 |
説明 |
---|---|
PROTECT |
ContentAdminタイプのACLを設定します。 |
READ |
CMサブシステムのサブシステム要素(フォルダ、カテゴリ、およびドキュメント)を取得します。 |
WRITE |
サブシステム要素をCMサブシステムに追加します。 |
EbiContentMgmtDelegateインタフェースでは、CMサブシステムでセキュリティに関連するほとんどのメソッドへのアクセスが提供されます。
次のEbiContentMgmtDelegateのメソッドを使用すると、オブジェクトのセキュリティを設定できます。
メソッド |
返される値 |
説明 |
---|---|---|
getAcl() |
java.security.acl.-Acl |
セキュリティ保護が可能な要素(カテゴリ、フィールド、レイアウトスタイル、レイアウトドキュメント記述子、ドキュメントタイプ、またはドキュメント)のACLを取得します。 |
setAcl() |
void |
セキュリティ保護が可能な要素にACLを割り当てます。 |
removeAcl() |
成功の場合、boolean |
要素に対して現在設定されているACLを削除します。 |
isAuthorized() |
boolean |
コンテキストオブジェクトで識別されたユーザにオブジェクトの指定タイプのアクセスが認証されているかどうかをチェックします。 |
getAllAccessible() |
コレクション |
セキュリティ保護が可能な要素のリストから、コンテキストが渡されたユーザがアクセスできる要素をフィルタ抽出します。 |
getAdminElement() |
EbiContentAdmin |
コンテンツオブジェクトに対して管理者アクセスを持つユーザおよびグループを識別するACLを保持するContent Admin要素を取得します。
|
hasAdminAccess() |
boolean |
これはisAuthorized()のショートカットであり、Content Admin要素への参照で呼び出されます。 |
セキュリティ保護が可能な要素には、オブジェクトの作成時にACLを指定できます。これは、EbiContentMgmtDelegateにおけるオブジェクトのaddメソッドの引数です(addDocument()やaddFolder()など)。
コード例については、ACLの追加例を参照してください。
次のオブジェクトでは、作成時にACLを指定しなかった場合、コンテナの設定が新しいオブジェクトにコピーされます。
新規に作成したもの |
ACLのコピー元 |
---|---|
フォルダ |
ペアレントフォルダ |
ドキュメント |
フォルダ |
レイアウト記述子 |
レイアウトスタイル |
オブジェクトが作成された後は、コンテナのACLへの接続はこれ以上ありません。コンテナのACLに変更を加えても、含まれるオブジェクトは影響を受けません。
他のオブジェクトタイプでは、ACLを指定しなかった場合、空のACLができます。
次のEbiContentAdminのメソッドを使用すると、ContentAdminグループのACLにアクセスできます。
setRestirctedAccess()メソッドを使用すると、任意のCM要素のアクセスをContentAdminユーザに制限できます。制限する許可を指定します。たとえば、WRITE許可に対してフォルダへのアクセスを制限した場合、ContentAdminグループのメンバーだけが要素へのWRITEアクセスを持ちます。
注記: 制限されたアクセスは、制限された要素に関連付けられている他のACLよりも優先されます。
EbiSecurityManagerインタフェースでの関連するメソッドは次のとおりです。
メソッド |
返される値 |
説明 |
---|---|---|
setRestrictedAccess() |
成功の場合、boolean |
要素に対して指定したアクセスをシステム管理者に制限します。 |
checkRestrictedAccess() |
boolean |
制限されたアクセスが要素にあるかどうかをチェックします。 |
この例では、次の方法を説明するdemonstrateSecurity()というメソッドを示します。
「プリンシパル」(認証の結果としてユーザに割り当てられたID)に関連付けられているContent Admin要素へのREADアクセスの追加
注記: この場合、フォルダではペアレントからACLを継承します。
demonstrateSecurity()メソッドでは、コンテンツマネージャ(EbiContentMgmtDelegate)、コンテキストオブジェクト(EbiContext)、およびプリンシパルにアクセスする必要があり、これらはすべて引数として渡されます。
public void demonstrateSecurity( EbiContentMgmtDelegate cmgr, EbiContext context, Principal principal) throws EboUnrecoverableSystemException, EboSecurityException, EboItemExistenceException, EboFactoryException, NotOwnerException { EboPermission readPerm = EboPermission.getPermission( context.getEbiSession(), EboPermission.READ); EboPermission writePerm = EboPermission.getPermission( context.getEbiSession(), EboPermission.WRITE); // Add READ access to the Content Admin element to the passed-in principal EbiContentAdmin adminElement = cmgr.getAdminElement(context); Acl admAcl = cmgr.getAcl(context, adminElement); AclEntry aclEntry = com.sssw.fw.factory.EboFactory.getAclEntry(); aclEntry.setPrincipal(principal); aclEntry.addPermission(readPerm); admAcl.addEntry(principal, aclEntry); cmgr.setAcl(context, adminElement, admAcl); // Add a folder with an ACL Acl acl = com.sssw.fw.factory.EboFactory.getAcl(); aclEntry = com.sssw.fw.factory.EboFactory.getAclEntry(); aclEntry.setPrincipal(principal); aclEntry.addPermission(readPerm); aclEntry.addPermission(writePerm); cmgr.addFolder( context, cmgr.getRootFolder(context), "Movie Reviews", EbiDocFolder.DIR_TYPE_DEFAULT, "Folder for movie reviews", acl); // Add a folder with no ACL -- it will inherit the ACL // from its parent folder (if there is an ACL set on the parent) EbiDocFolder frFolder = cmgr.addFolder( context, cmgr.getRootFolder(context), "Financial Reports", EbiDocFolder.DIR_TYPE_DEFAULT, "Folder for financial reports", null); // This code adds an ACL to an existing folder. cmgr.setAcl(context, frFolder, acl); }
次の例では、セキュリティ例外(および他の例外)の処理方法を説明するdemonstrateHandleExceptions()というメソッドを示します。
このコードでは、IDが変数docidに割り当てられているドキュメントのバージョン2が発行されます。指定したドキュメントをユーザが発行できない場合、publishDocumentContentVersion()メソッドによってEboSecurityExceptionがスローされます。この例では、コンテキストオブジェクトにエラーメッセージを追加することによって例外を処理します。その後、ポートレットでは、生成されたコンテンツにエラーメッセージを含むことが可能であるため、ユーザは問題を把握できます。
demonstrateHandleExceptions() メソッドでは、コンテンツマネージャ(EbiContentMgmtDelegate)、コンテキストオブジェクト(EbiContext)、および目的のドキュメントにアクセスする必要があり、これらはすべて引数として渡されます。
public void demonstrateHandleExceptions( EbiContentMgmtDelegate cmgr, EbiContext context, String docID) { try { cmgr.publishDocumentContentVersion(context, docID, 2, true, true); } catch (EboSecurityException se) { se.printStackTrace(); String msg = "Security violation:" + se.toString(); context.setValue("error", "User does not have access." + msg); } catch (EboUnrecoverableSystemException use) { use.printStackTrace(); String msg = "Unrecoverable exception:" + use.toString(); context.setValue("error", msg); } catch (EboItemExistenceException iee) { iee.printStackTrace(); String msg = "Item existence exception:" + iee.toString(); context.setValue("error", msg); } } }
Copyright © 2004 Novell, Inc. All rights reserved. Copyright © 1997, 1998, 1999, 2000, 2001, 2002, 2003 SilverStream Software, LLC. All rights reserved. more ...