0

我構建了一個Web應用程序,並且有一些操作對已識別的人員進行了保護。認證中的數據實時訪問

我使用sping安全進行訪問控制,但是我不知道如何在深入到數據級別時控制它們。

例如,有兩個操作listedit操作。

administrator of the companyadministrator of one department都可以訪問這些操作,但是它們可以「列出」或「編輯」的數據並不相同。

administrator of the company可以訪問公司的所有數據,而administrator of one department只能訪問他/她的部門的數據。

所以我想知道實施這些要求的最佳實踐是什麼?

回答

0

最簡單的方法 - 在服務層上使用PostFilter註釋。

@Transactional(readonly=true) 
@PostFilter("hasPermission(filterObject, 'edit')") 
List<DepartamentData> getDepartamenData(); 

@Transactional 
@PreAuthorize("hasPermission(#data, 'edit')") 
List<DepartamentData> editDepartamenData(DepartamentData data); 

或者又如:

@Transactional(readonly=true) 
@PostFilter(
    " hasRole('company_admin')" + 
    "|| (hasRole('departament_admin') && filterObject.departament.equals(principal.departament))") 
List<DepartamentData> getDepartamenData();