1

我尝试使用 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)保护的方法/对象,而不是管理员。

4

1 回答 1

1

简短的回答:不,权限不是开箱即用的分层。

如果您希望它们是分层的,您需要自定义实现PermissionEvaluator或类似的。

于 2014-04-02T14:51:57.520 回答