0

私たちのプロジェクトには、会社の内部ネットワークで使用される JSF2 ページがあります。しかし、これらのページをインターネットに公開します。したがって、ページは誰でも利用できます。ただし、ユーザーがインターネットから来た場合、一部のフィールドはレンダリングされません。

「userIsInRole」など、コンポーネントごとにレンダリングされた属性を書き込むことができることは知っています。しかし、追加の「レンダリングされた」コントロールは、効率的で洗練された方法ではないようです。したがって、以下に示すように、カスタム属性を使用して、オンラインでレンダリングされるコンポーネントをマークする予定です。

<h:inputText context="internet" />
...

inputText またはコンポーネント コードのレンダラーで:

if(user is from Internet && context = "internet") {
    return true; // or render... whatever
}

コンポーネントがインターネットとしてマークされていない場合は、社内からのみ利用 (レンダリング) できることを意味します。

特定の属性に従って JSF2 コンポーネントを使用して認可を実装することは可能ですか? より良いオプションはありますか?それとも、インターネット ユーザー用に別のページを設計する必要がありますか?

プロジェクトでは、PrimeFaces + Spring を使用します。

ありがとうございました

4

1 に答える 1

1

ばかげてる。最終的に使用する労力の違いは何ですか

<h:inputText context="internet" />

<h:inputText rendered="#{intranet}" />

?

あなたの唯一の問題が、そのような醜いコードになるたびに条件全体を繰り返す必要があることである場合

<h:inputText rendered="#{not (user.hasRole('internet') and context eq 'internet')}" />
<h:inputText rendered="#{not (user.hasRole('internet') and context eq 'internet')}" />
<h:inputText rendered="#{not (user.hasRole('internet') and context eq 'internet')}" />
...

次に、条件を単一のリクエストスコープ変数にリファクタリングするだけです

<c:set var="intranet" value="#{not (user.hasRole('internet') and context eq 'internet')}" scope="request" />
...
<h:inputText rendered="#{intranet}" />
<h:inputText rendered="#{intranet}" />
<h:inputText rendered="#{intranet}" />
...
于 2013-07-17T15:03:42.520 に答える