我有一个弹簧安全 ACL 系统,它似乎工作正常,只是我不确定我应该如何以编程方式执行权限检查。
我的应用分为 3 层(视图、服务(业务)、DAO),我想在服务层执行身份验证。因此,对于将域对象作为参数的方法:
@PreAuthorize("hasPermission(#proj,'write'")
public Project updateProject(Project proj) {
.............
}
问题通过注释解决。
但是对于将没有 acl 的对象作为参数的方法,我必须以编程方式检查用户是否具有权限。
假设我有一个对象 ProjectWrapper:
public class ProjectWrapper {
private Project project;
private Something something;
// setters and getters here
}
所以现在我的 Service 方法收到了这种类型的参数:
public Project updateProject(ProjectWapper projWrapp) {
Project p = projWrapp.getProject();
// before performing any operation on project I need to know if current user has neccessary permissions on this object
// ??? how do i check that ?
}
我需要使用 AclService 来执行此操作吗?就像我需要创建/更新权限一样,还是有更清洁/更好的可能性?
deleteProject(Long id) 方法的相同问题,首先我必须从 db 获取对象以检查当前用户是否具有删除权限。