[英]Spring security: Restricting form interactivity using roles
我有一個表格,允許用戶根據其所分配的角色與之交互。 例如,我的應用程序具有角色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表單)上,我設置了一個變量來確定誰登錄。例如,如果用戶為role_user
則以下內容將isUser
設置為true
,否則設置為false
。
<security:authorize access="hasRole('ROLE_USER')" var="isUser" />
<security:authorize access="hasRole('ROLE_ADMIN')" var="isAdmin" />
然后,如果isUser為true,則將userClass應用於表單,否則isAdmin的adminClass為true(例如,請參見下文)。
<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}">
然后,我使用CSS來應用與每個角色相關的樣式,如果設置了“ userClass”類,則使用javascript禁用所有表單字段(適用於role_users
,該用戶不能編輯任何內容)。
這是我目前的解決方案,並且發現隨着我添加更多具有不同限制的角色(例如,僅對某些新角色禁用特定的表單字段),維護起來變得更加麻煩。 他們在前端表單上應用這些限制的任何更好/建議的方法嗎?
謝謝,
您需要的是Spring Security訪問控制列表(ACL) 。
這樣,您就可以為每個角色(ROLE_USER,ROLE_ADMIN)具有權限(查看,添加,編輯,刪除)。
並且在您的代碼中,您只需要檢查ROLE是否具有特定權限。
這樣,您的應用程序將不會依賴於ROLE。
該框架非常靈活,允許您在較低級別上指定可以由具有權限的用戶或角色來操縱哪些對象。
你可以看教程
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.