1

假设我有一个个人资料页面,其中有一个“编辑您的个人资料”链接。所有用户都可以查看个人资料页面,但编辑链接按钮应该只对查看其个人资料的登录用户可见,而不是其他用户的个人资料。

到目前为止,我有这个代码,

<sec:authorize access="isAuthenticated()">
<sec:authentication property="principal.username" var="principal"/>
<c:if test="${profile_username eq principal}">   <!--profile_username is the username of the viewed profile  -->
<!-- edit your profile link -->
</c:if>
</sec:authorize>    

有没有更清洁的方法来做到这一点?可能是一个像

<sec:authorize access="isTheSamePerson()"/>.

提前致谢。:)

4

1 回答 1

1

您要考虑实际的域对象。出于这些目的,Spring Security 中有特殊的ACL功能。您可以设置它并使用相应的访问控制列表标签:

<sec:accesscontrollist hasPermission="2" domainObject="${profile}">
    <!-- Your edit link goes here -->
    <!-- "2" means write permission -->
    <!-- Be sure that you use Spring Security >= 3.1.2. This syntax may not works for smaller versions due to bugs  -->
</sec:accesscontrollist>

如果您只有这样一种情况,这可能是一种矫枉过正。

选项 2。您可以定义自定义 Web 安全表达式:

<sec:authorize access="isOwner(#profile)"/>.

也不是那么简单

我认为自定义 JSP 标记(标记文件)将是最简单的解决方案:

<customtags:authorizeeditaccount account="${profile}"/> 

这个标签会做同样的事情。它看起来会好很多。

于 2013-01-22T15:10:05.350 回答