【问题标题】:data realted access in authenciation身份验证中的数据相关访问
【发布时间】:2012-02-08 12:52:45
【问题描述】:
我正在构建一个 web 应用程序,并且有一些操作是为识别的人保护的。
我使用sping安全进行访问控制,但是我不知道如何在深入到数据级别时控制它们。
例如,有两个操作list和edit操作。
administrator of the company 和administrator of one department 都可以访问这些操作,但它们可以“列出”或“编辑”的数据不一样。
administrator of the company 可以访问公司的所有数据,而administrator of one department 只能访问他/她部门的数据。
所以我想知道实现这些要求的最佳做法是什么?
【问题讨论】:
标签:
authentication
spring-security
role-base-authorization
【解决方案1】:
最简单的方法——在服务层使用 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();