0

我正在构建一个 Web 应用程序,并且有一些操作是为已识别的人保护的。

我使用 sping 安全性进行访问控制,但是我不知道如何在深入到数据级别时控制它们。

例如,有两个操作listedit操作。

theadministrator of the company和 theadministrator of one department都可以访问这些操作,但它们可以“列出”或“编辑”的数据不一样。

administrator of the company可以访问公司的所有数据,而administrator of one department只能访问他/她部门的数据。

所以我想知道实现这些要求的最佳实践是什么?

4

1 回答 1

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();
于 2012-02-08T13:37:06.467 回答