第4章

コンテンツのセキュリティ保護

この章では、ACLベースのセキュリティを使用してCM (コンテンツ管理)サブシステム要素へのアクセスを認証する方法について説明します。この章は、次の節から構成されています。

注記:   この章で説明するセキュリティタスクのほとんどは、CMサブシステムを使用して実現することもできます。

For more information    詳細については、を参照してください。

 
Top of page

アクセス制御について

ACLベースのセキュリティで簡単に説明されているように、CMサブシステムでは、ACLベースのセキュリティをサポートしています。アクセス制限は、ユーザIDまたはグループメンバーシップに基づいて、CMサブシステムのほとんどのオプジェクトにおいて指定できます。アクセス制限は、次に対して使用できます。

 
Top of section

CMユーザグループ

包括的なセキュリティポリシーでは、さまざまなユーザの役割に対し、それぞれ異なる許可を設定する必要があります。CMサブシステムでの一般的な役割は次のとおりです。

役割

説明

作成者

ドキュメントに対してreadおよびwriteアクセスがあり、フォルダおよびカテゴリに対してread、write、およびlistアクセスがあります。

発行者

ドキュメントに対してpublishアクセスがあり、フォルダおよびカテゴリに対してlistアクセスがあります。

管理者

すべてのオブジェクトに対してすべてのアクセス権があります。ユーザは、EbiContentAdminインタフェースに割り当てられたACLによって少なくとも1つの許可が与えられている場合、管理者とみなされます。ContentAdminグループを参照してください。

exteNd Directorのユーザおよびグループを設定する際には、ユーザがこれらの役割にどのように属するかを考慮し、適切なグループを作成します。これらのユーザIDおよびグループを使用して、セキュリティが実装されるACLを作成できます。CMサブシステムを通して取得および再使用できるマスタACLを作成することもできます。

Director管理コンソール(DAC)を使用すると、ユーザおよびグループを設定できます。

For more information    詳細については、『ユーザ管理ガイド』のDACのディレクトリセクションの使用に関する章を参照してください。

 
Top of page

ACLベースのセキュリティ

CMオブジェクトにおけるアクセスの制限は、ACL (アクセス制御リスト)を使用することによって指定します。ACLに対するサポートを提供するために、exteNd Directorによってjava.security.acl.Aclインタフェースが実装されます。セキュリティ保護が可能な各「要素」には、サポートされているアクセス権タイプまたは「許可」のセットがあります。サポートされている許可は、各オブジェクトのインタフェースで文字列定数として定義されます。

この節では、CMオブジェクトにアクセス制限を指定するためのACLの使用について説明します。

For more information    exteNd DirectorアプリケーションでのACLの使用の一般的な情報については、『ユーザ管理ガイド』のACLベースのセキュリティに関する章を参照してください。

 
Top of section

許可

CMサブシステムに対して定義される許可には次のものが含まれます。

許可

説明

PROTECT

ACLのユーザおよびグループは、オブジェクトの許可を変更できます。

READ

ACLのユーザおよびグループは、オブジェクトを表示したり、オブジェクトのメタデータを取得したりすることができます。

WRITE

ACLのユーザおよびグループは、オブジェクトをプログラム的に更新したり、ドキュメントの新しいバージョンをチェックインしたりすることによって、オブジェクトを変更できます。WRITEアクセスを拒否されたユーザは、ドキュメントをチェックアウトできません。

LIST

ACLのユーザおよびグループは、このオブジェクトに含まれるオブジェクトのリストを表示できます。これには、フォルダのドキュメントとサブフォルダ、カテゴリのドキュメントとサブカテゴリ、およびドキュメントタイプに関連付けられているドキュメントが含まれます。

PUBLISH

ドキュメントに対して、ACLのユーザおよびグループは、ドキュメントの発行されたステータスを変更できます。また、ドキュメントを発行したり、発行された領域から削除したりすることもできます。

 
Top of section

要素タイプおよび関連付けられている許可

サブシステムのセキュリティ保護が可能な要素タイプ(セキュリティ保護が可能な一部のスーパインタフェースを除く)およびサポートされている許可は、次の表のとおりです。

オブジェクト

アクセス権タイプ

EbiContentAdmin

PROTECT、READ、WRITE

EbiDocType

PROTECT、READ、WRITE、LIST

EbiDocField

PROTECT、READ、WRITE

EbiDocCategory

PROTECT、READ、WRITE、LIST

EbiDocFolder

PROTECT、READ、WRITE、LIST

EbiDocument

PROTECT、READ、WRITE、PUBLISH

EbiDocLayoutStyle

PROTECT、READ、WRITE

EbiLayoutDocDescriptor

PROTECT、READ、WRITE

 
Top of section

ContentAdminグループ

EbiContentAdminインタフェースは、組み込みのコンテンツ管理者グループを表します。このグループに追加されるユーザには、サブシステム管理に対して指定されたアクセスがあります。使用可能な許可は次のとおりです。

許可

説明

PROTECT

ContentAdminタイプのACLを設定します。

READ

CMサブシステムのサブシステム要素(フォルダ、カテゴリ、およびドキュメント)を取得します。

WRITE

サブシステム要素をCMサブシステムに追加します。

 
Top of page

アクセス制御を管理するためのメソッド

EbiContentMgmtDelegateインタフェースでは、CMサブシステムでセキュリティに関連するほとんどのメソッドへのアクセスが提供されます。

 
Top of section

既存の要素のACLへのアクセス

次のEbiContentMgmtDelegateのメソッドを使用すると、オブジェクトのセキュリティを設定できます。

メソッド

返される値

説明

getAcl()

java.security.acl.-Acl

セキュリティ保護が可能な要素(カテゴリ、フィールド、レイアウトスタイル、レイアウトドキュメント記述子、ドキュメントタイプ、またはドキュメント)のACLを取得します。

setAcl()

void

セキュリティ保護が可能な要素にACLを割り当てます。

removeAcl()

成功の場合、boolean

要素に対して現在設定されているACLを削除します。

isAuthorized()

boolean

コンテキストオブジェクトで識別されたユーザにオブジェクトの指定タイプのアクセスが認証されているかどうかをチェックします。

getAllAccessible()

コレクション

セキュリティ保護が可能な要素のリストから、コンテキストが渡されたユーザがアクセスできる要素をフィルタ抽出します。

getAdminElement()

EbiContentAdmin

コンテンツオブジェクトに対して管理者アクセスを持つユーザおよびグループを識別するACLを保持するContent Admin要素を取得します。

For more information    ContentAdminのACLへのアクセスを参照してください。

hasAdminAccess()

boolean

これはisAuthorized()のショートカットであり、Content Admin要素への参照で呼び出されます。

 
Top of section

新しい要素のACLの指定

セキュリティ保護が可能な要素には、オブジェクトの作成時にACLを指定できます。これは、EbiContentMgmtDelegateにおけるオブジェクトのaddメソッドの引数です(addDocument()やaddFolder()など)。

For more information    コード例については、ACLの追加例を参照してください。

 
Top of section

ACLの継承

次のオブジェクトでは、作成時にACLを指定しなかった場合、コンテナの設定が新しいオブジェクトにコピーされます。

新規に作成したもの

ACLのコピー元

フォルダ

ペアレントフォルダ

ドキュメント

フォルダ

レイアウト記述子

レイアウトスタイル

オブジェクトが作成された後は、コンテナのACLへの接続はこれ以上ありません。コンテナのACLに変更を加えても、含まれるオブジェクトは影響を受けません。

他のオブジェクトタイプでは、ACLを指定しなかった場合、空のACLができます。

 
Top of section

ContentAdminのACLへのアクセス

次のEbiContentAdminのメソッドを使用すると、ContentAdminグループのACLにアクセスできます。

メソッド

返される値

説明

getAcl()

java.security.acl.-Acl

Content Admin要素に対して現在設定されているACLを取得します。

setAcl()

void

Content Admin要素にACLを割り当てます。

removeAcl()

成功の場合、boolean

Content Admin要素に対して現在設定されているACLを削除します。

isUserAuthorized()

boolean

現在のユーザがContentAdminのACLにリストされているかどうかをチェックします。

 
Top of section

管理者への要素アクセスの制限

setRestirctedAccess()メソッドを使用すると、任意のCM要素のアクセスをContentAdminユーザに制限できます。制限する許可を指定します。たとえば、WRITE許可に対してフォルダへのアクセスを制限した場合、ContentAdminグループのメンバーだけが要素へのWRITEアクセスを持ちます。

注記:   制限されたアクセスは、制限された要素に関連付けられている他のACLよりも優先されます。

EbiSecurityManagerインタフェースでの関連するメソッドは次のとおりです。

メソッド

返される値

説明

setRestrictedAccess()

成功の場合、boolean

要素に対して指定したアクセスをシステム管理者に制限します。

checkRestrictedAccess()

boolean

制限されたアクセスが要素にあるかどうかをチェックします。

 
Top of page

ACLの追加例

この例では、次の方法を説明するdemonstrateSecurity()というメソッドを示します。

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);
      }

 
Top of page

セキュリティ例外の処理例

次の例では、セキュリティ例外(および他の例外)の処理方法を説明する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 ...