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)"/>