身份验证中的数据相关访问

发布于 2025-01-03 23:44:49 字数 340 浏览 1 评论 0原文

我正在构建一个网络应用程序,并且有一些操作是针对已识别人员的保护。

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

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

公司管理员某个部门管理员都可以访问这些操作,但他们可以“列出”或“编辑”的数据并不相同。

公司管理员可以访问公司的所有数据,而一个部门的管理员只能访问他/她所在部门的数据。

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

I am build a web application,and there are some operations is protected for identified people.

I use the sping security for access control,however I have no idea how to control them when deep to the data level.

For exmaple,there are two operation list and edit operation.

Both the administrator of the company and the administrator of one department can access these operations,but the data they can 'list' or 'edit' are not the same.

administrator of the company can get access to all the data of the company while administrator of one department can only get access to the data of his/her department.

So I wonder what is the best practice to implement these requirements?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

岁月如刀 2025-01-10 23:44:49

最简单的方法 - 在服务层使用 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();

Most easy method - use PostFilter annotation on service layer.

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

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

Or another example:

@Transactional(readonly=true)
@PostFilter(
  "   hasRole('company_admin')" +
  "|| (hasRole('departament_admin') && filterObject.departament.equals(principal.departament))")
List<DepartamentData> getDepartamenData();
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文