我有一个表单,允许用户根据他们分配的角色与其进行交互。例如,我的应用程序具有角色role_user
,此角色仅允许用户查看表单内容(不编辑表单或提交表单)以及可以查看/编辑/提交表单的角色role_admin
。
后端(服务层)非常直接使用这些限制进行编码我在任何服务类/方法上使用@PreAuthorize("hasRole('role_admin')")
,这将导致为我的表单保存更改。例如,我将表单保存在提交上的方法只允许role_admin
个用户执行此操作。
@PreAuthorize("hasRole('role_admin')")
public void saveForm(MyForm myform){
//Save form here
}
在前端(jsp,jstl和spring表单)我设置一个变量来确定谁登录。例如,如果用户是{{1},则下面将isUser
设置为true
}否则role_user
。
false
如果isUser为true,我将userClass应用于我的表单,否则isAdmin的adminClass为true(例如见下文)。
<security:authorize access="hasRole('ROLE_USER')" var="isUser" />
<security:authorize access="hasRole('ROLE_ADMIN')" var="isAdmin" />
然后我使用css来应用与每个角色相关的样式,并使用javascript来禁用所有表单字段,如果类&#34; userClass&#34;已设置(<c:choose>
<c:when test='${isAdmin}'>
<c:set var="roleClass" value="adminClass"/>
</c:when>
<c:when test='${isUser}'>
<c:set var="roleClass" value="userClass"/>
</c:when>
<c:otherwise>
<c:set var="roleClass" value="userClass"/>
</c:otherwise>
</c:choose>
<form:form class="${roleClass}">
谁不能编辑任何内容)。
这是我目前的解决方案,并且发现当我添加更多具有不同限制的角色时(例如,仅为某些新角色禁用特定表单字段),维护变得更加麻烦。他们是否有更好/推荐的方法在前端表格上应用这些限制?
谢谢,
答案 0 :(得分:0)
您需要的是Spring Security Access Control Lists (ACL)。
使用此功能,您可以拥有每个角色的权限(查看,添加,编辑,删除)(ROLE_USER,ROLE_ADMIN)。
在您的代码中,您只需检查ROLE是否具有特定权限。
这样您的应用程序将不依赖于ROLE。
此框架非常灵活,允许您在较低级别指定具有权限的用户或角色可以操纵哪些对象。
您可以看到tutorial