15.6.3. ユーザーインターフェースのセキュリティ
適切に設計されたインターフェースはユーザーに使用許可がないオプションはそのユーザーには表示しません。 Seam Security はユーザーの権限に応じて個別のコントロールやページセクションの条件的な表示が可能で、 コンポーネントのセキュリティに使用する式と同じ EL 式を使用します。
このセクションではインターフェースのセキュリティ例についていくつか見ていきます。 まず、 ユーザーがまだログインしていない場合にのみ表示させたいログインフォームがあるとします。
identity.isLoggedIn() プロパティで次のように記述することができます。
<h:form class="loginForm" rendered="#{not identity.loggedIn}">
<h:form class="loginForm" rendered="#{not identity.loggedIn}">
ユーザーがログインしていなければこのログインフォームが表示されます (実にシンプルですね)。 次に、 このページにメニューがあり、
manager ロールを持っているユーザーだけがアクセス可能な操作をいくつか持たせたいとします。このような場合の 1 つの方法として次のように記述することができます。
<h:outputLink action="#{reports.listManagerReports}"
rendered="#{s:hasRole('manager')}"> Manager Reports
</h:outputLink>
<h:outputLink action="#{reports.listManagerReports}"
rendered="#{s:hasRole('manager')}"> Manager Reports
</h:outputLink>
これもシンプルで、 ユーザーが
manager ロールのメンバーでなければ outputLink は表示されません。 rendered 属性は一般に制御そのものに使われたり、 前後にある <s:div> や <s:span> 制御で使われます。
次にもう少し複雑な条件的な表示の例を見てみましょう。 ページに
h:dataTable コントロールがあり、 特定の権限を持つユーザーだけにその記録に操作リンクを表示させたいとします。 s:hasPermission EL 関数によりオブジェクトパラメータを使ってユーザーがそのオブジェクトに対して必要なパーミッションを持っているかどうかを判断することができます。 安全なリンクを持つ dataTable は次のようになります。