나는 스프링 보안 ACL 시스템을 갖추고 있으며, 제대로 작동하는 것처럼 보입니다. 단지 프로그램에서 권한 검사를 어떻게 수행해야하는지 잘 모르겠습니다.
내 앱이 뷰, 서비스 (비즈니스), DAO의 3 개의 레이어로 분할되어 있으며 서비스 레이어에서 인증을 수행하려고합니다. 따라서 도메인 객체를 인수로 취하는 메소드의 경우 :스프링 보안 권한 프로그램 검사
@PreAuthorize("hasPermission(#proj,'write'")
public Project updateProject(Project proj) {
.............
}
주석을 사용하면 문제가 해결됩니다.
하지만 acl이없는 객체를 인수로 취하는 메소드의 경우 사용자에게 권한이 있는지 프로그래밍 방식으로 확인해야합니다.
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를 사용해야합니까 :
public class ProjectWrapper {
private Project project;
private Something something;
// setters and getters here
}
그래서 지금 내 서비스 방법은 인수의 유형을받은 :
Let`s 내가 객체 ProjectWrapper이 있다고? 권한을 만들거나 업데이트해야 할 때처럼 또는 클리너/더 좋은 가능성이 있습니까?
deleteProject (Long id) 메서드에 대해 동일한 질문을합니다. 먼저 현재 사용자에게 삭제 권한이 있는지 확인하기 위해 db에서 개체를 가져와야합니다.