众所周知,访问对象的方法之一是使用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为空。 要确定这应该是什么,我是否需要根据id在控制器中加载此对象?除了ACL之外还有其他方法吗?