1

私はSpring Securityも使用してSpring MVC webappを開発しています。したがって、認証された各ユーザーには、指定された ROLE があります。

この ROLE に基づいて、ユーザーはエンティティ プロパティのサブセットのみを変更できます。

現在、ビューでSpringセキュリティタグを使用し、ログインしたユーザーの役割に基づいて、入力タイプを非表示にして変更不可能なフィールドをマッピングすることで、これに到達しようとしています。でも、すぐに悪夢になると思います!

簡単な例として、私は次のようにします (管理者はすべてを変更でき、ユーザーは value1 のみを変更でき、ゲストは変更できません):

<sec:authorize access="hasRole('ROLE_ADMIN')">
    Value1: <input type="text" name="value1" value="${entity.value1}" />
    Value2: <input type="text" name="value2" value="${entity.value2}" />
</sec:authorize>
<sec:authorize access="hasRole('ROLE_USER')">
    Value1: <input type="text" name="value1" value="${entity.value1}" />
    Value2: ${entity.value2}
    <input type="hidden" name="value2" value="${entity.value2}" />
</sec:authorize>
<sec:authorize access="hasRole('ROLE_GUEST')">
    Value1: ${entity.value1}
    Value2: ${entity.value2}
    <input type="hidden" name="value1" value="${entity.value1}" />
    <input type="hidden" name="value2" value="${entity.value2}" />
</sec:authorize>

物事をできるだけシンプルに保つために、どのような代替アプローチを取ることができますか?

ありがとうマルコ

4

1 に答える 1

0

1 つの方法は hasAnyRole([role1,role2])、ロールのリストを確認するために使用することです。コードは次のようになります。

  <sec:authorize access="hasAnyRole('ROLE_ADMIN' , 'ROLE_USER')">
       Value1: <input type="text" name="value1" value="${entity.value1}" />
    </sec:authorize>

    <sec:authorize access="hasRole('ROLE_GUEST')">
        Value1: ${entity.value1}
       <input type="hidden" name="value1" value="${entity.value1}" />
    </sec:authorize>

    <sec:authorize access="hasRole('ROLE_ADMIN')">
         Value2: <input type="text" name="value2" value="${entity.value2}" />
    </sec:authorize>
    <sec:authorize access="hasAnyRole('ROLE_USER' , 'ROLE_GUEST')">
        Value2: ${entity.value2}
         <input type="hidden" name="value2" value="${entity.value2}" />
    </sec:authorize>
于 2013-07-10T19:17:04.073 に答える