我正在构建一个Web应用程序,并且有一些操作受到了已识别人员的保护。
我使用sping安全性进行访问控制,但是我不知道如何在深入到数据级别时控制它们。
例如,有两个操作list
和edit
操作。
administrator of the company
和administrator of one department
都可以访问这些操作,但他们可以“列出”或“编辑”的数据并不相同。
administrator of the company
可以访问公司的所有数据,而administrator of one department
只能访问他/她部门的数据。
所以我想知道实施这些要求的最佳做法是什么?
答案 0 :(得分: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();