基于用户角色的实体属性访问

时间:2013-07-10 14:14:46

标签: spring spring-mvc spring-security

我正在使用spring security开发Spring MVC webapp。因此每个经过身份验证的用户都有一个指定的角色。

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

现在我试图通过在视图中使用spring安全标记并根据已记录用户的角色映射隐藏输入类型的不可修改字段来实现此目的。但我认为它很快就会成为一场噩梦!

作为一个简单的例子,我做了这样的事情(管理员可以修改所有,用户只能修改value1而Guest不能修改):

<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>

为了让事情尽可能简单,我可以采取哪些替代方法?

谢谢 马可

1 个答案:

答案 0 :(得分: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>