/
RoleValidator インタフェース

RoleValidator インタフェース

新しいインタフェースである RoleValidator は、カスタムユーザー詳細の検証をするために作成されました。そのため、Roleの単純検証の代わりに、カスタムユーザー詳細の追加プロパティは検証で使用可能です。詳細に関しては、 reference API Reference Framework のリンクをクリックし、その後 com.nexaweb.referenceframework.core.security パッケージを選択します。

BasicRoleValidator RoleValidator インタ フェースのデフォルト実装です。しかし、validateRole( String role ) メソッドのみをサポートし、設定済みロール所有者に基づきUserDeails に対するロールでパスされたもののみを検証します。デフォルトではロール所有者が Affirmative に設定されています。

RoleValidator のカスタム組み込みは、nexaweb-reference-framework.xml のセキュリティセクションで指定されます。

 

<security>
 <!-- Whether or not security is enable -->
 <enabled>true</enabled>
 <!-- xal file to use as login page -->
 <loginPage>XAL/login/Login.xal</loginPage>
        
 <!-- custom role validator -->
 <roleValidator>com.mycompany.security.impleCustomRoleValidator</roleValidator>       
</security>

これは指定されたクラスを例示化し、roleValidator として設定します。

その後、impleCustomRoleValidator クラスでは、次のメソッドを実装することが可能です。

public boolean validateElement( Element element )

 

例えば、次のようなページのボタンがある場合 :

 <button text="Push Me" validate="true" dept="Department_A"/>

validateElement( Element element ) ファンクションでは、次のようなコードを持つ可能性があります :

public boolean validateElement( Element element ) 
 {
 
 //validation returning value
 boolean retValue = false; 
 
 //User details of the logged in user
 CustomUserDetailsuserDetails = (CustomUserDetails)AppContext.getAppContext().getSecurityManager().getUserDetails(); 
 //if no validation needed or user's dept attributes contains "Department_A"
 if(element.getAttribute("validate").equalsIgnoreCase("false") ( 
 element.getAttribute("validate").equalsIgnoreCase("true") &&
 element.getAttribute("dept").indexOf(userDetails.getDepartment())!=-1)){
 
 retValue=true; 
 
 element.setAttribute("text", "passed");//validation passed
 }else{ 
 element.setAttribute("text","failed"); //otherwise validation failed
 }
 return retValue;
 }

バリデーションが true に設定され、ユーザーが ”dept” 属性の"Department_A "の値がある場合(注:ユーザーは一つ以上の dept でアサインされる可能性がある)、バリデーションはパスされます。

そうではない場合は、バリデーションは失敗します。

バリデーションは MCO ファンクション呼び出しまたは SecurityManager インタフェースのイベントによりトリガーされる可能性があります。例えば、上記の "onCreate" イベントを使用すると、次のようになります :

1. Mco 呼び出しを使用:

    <button text="Push Me" validate="true" dept="Department_A" onCreate="mco:MyMco.validateElement(this)"/>

MyMco は次のようになります :

     private impleCustomRoleValidator roleValidator = (impleCustomRoleValidator) AppContext.getAppContext().getSecurityManager().getRoleValidator();
 
      ...
 
      public void validateElement(Element element){
          roleValidator.validateElement(element) );
      }

2. SecurityManager インタフェースを使用 :

    <button text="Push Me" validate="true" dept="Department_A" onCreate="SecurityManager.validateElement(this)"/>

これらの2つのメソッドでは同じ目的を提供します。

 

同じように、impleCustomRoleValidator クラスでは、次も実装します :

 

public boolean validateInfo( Object infoObj )

このケースでは、検証する全てのオブジェクトをパスすることができます。

上記の同じ例において、

1. Mco 呼び出しを使用:

    <button text="Push Me" validate="true" dept="Department_A" onCreate="mco:MyMco.validateInfo(this)"/>

2. SecurityManager インタフェースを使用 :

    <button text="Push Me" validate="true" dept="Department_A" onCreate="SecurityManager.validateInfo(this)"/>