众所周知,访问对象的方法之一是使用spring security acl方法。在这个方法中,在执行了一组设置并存储了需要的数据之后,使用下面的方法,我们将在方法中检查用户的访问权限来做某事。考虑一个具有下图所示结构的项目。在此图中,每个用户都可以访问单个部门,因此如果在系统上创建信息,则应该基于此访问权限。例如,用户不能为不在其授权部门的员工注册工作。
public class Department {
String departmentName;
List<Employee> employeeList;
}
public class Employee {
Department department;
List<Job> jobList;
}
public class Job {
String jobTitle;
Employee employee;
}
public class User {
String username;
List<Department> departmentList;
}
@Transactional
@PreAuthorize("hasPermission(#job.employee.department.id, ‘Department’, 'write')")
public void save(Job job) {
super.save(job);
//TODO
}
考虑发送到 UI 层的信息是作为 JSON 发送的。在这种情况下,对于作业插入,JSON 需要如下所示。
{
jobTitle:”CTO”,
employee:{
id:1
}
}
这些信息在控制器层转换为Job对象,然后在服务层调用save方法。在这种情况下,给定的访问权限不起作用,因为job.employee.department.id 为 null。 要确定这应该是什么,我是否需要根据 id 在控制器中加载这个对象?除了ACL还有其他方法吗?