我尝试使用 Spring Security ACL 强制执行一个新应用程序,经过阅读后,我对每个 ACE 的权限都有疑问。我期望如果主体对域对象实例具有管理权限(16),则能够使用此注释访问方法:
@Override
@PostFilter("hasPermission(filterObject, 'READ')")
public List<Project> findAllProjects() {
TypedQuery<Project> tq = em.createNamedQuery("Project:findAll", Project.class);
List<Project> projects = tq.getResultList();
return projects;
}
但
@PostFilter("hasPermission(filterObject, 'ADMINISTRATION') OR hasPermissions(filterObject,'READ')")
它似乎工作。
所以,我的问题是:这些权限不是分层的吗?
我的意思是,为什么我必须明确指定具有读取权限的方法的管理员权限?admin 不是比 read “更大”吗?
我在想,如果我授予用户管理员权限,那么 hte 用户将能够访问所有受“较低”操作(C、R、U、D)保护的方法/对象,而不是管理员。