验证中与数据相关的访问

时间:2012-02-08 12:52:46

标签: authentication spring-security role-base-authorization

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

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

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

administrator of the companyadministrator of one department都可以访问这些操作,但他们可以“列出”或“编辑”的数据并不相同。

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

所以我想知道实施这些要求的最佳做法是什么?

1 个答案:

答案 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();