1

我正在开发一个 Spring MVC webapp,也使用 spring 安全性。所以每个经过身份验证的用户都有一个指定的角色。

基于此角色,用户只能修改实体属性的子集。

现在,我试图通过在视图中使用 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

一种方法是使用 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 回答