我如何向 apache shiro 询问对象 ID

How can I ask apache shiro about object ids

给定一个具有以下权限的主题:

printer:1:manage  
printer:2:manage  
printer:3:admin  
printer:1:print
printer:4:print

我知道我可以问如果:

subject.isPermitted('printer:1:manage') 

但是我该如何向 shiro 提问,例如:

Apache Shiro 的 API 仅提供权限或角色的检查和断言;它不提供任何查找器方法来查找 Subject 有权访问什么,或查找哪些 Subject 有权访问某些内容。

您可以探索在您的 AuthorizingRealm 中实施您自己的 findPermissions(),它需要 查询权限 并收集 [=13] 的主题的所有可用权限=] returns true,有点像这样:

protected Collection<Permission> findPermissions(Permission queryPermission, AuthorizationInfo info) {
    Collection<Permission> foundPermissions;
    Collection<Permission> perms = getPermissions(info);

    if (perms != null && !perms.isEmpty()) {
        foundPermissions = new ArrayList<Permission>();
        for (Permission perm : perms) {
            if (queryPermission.implies(perm)) {
                foundPermissions.add(perm);
            }
        }
    }
    else {
        foundPermissions = Collections.emptyList();
    }

    return foundPermissions;
}

请注意,这与 AuthorizingRealm.isPermitted() 如何执行检查是相反的 implies 关系。

如果您还没有致力于 Apache Shiro,那么开源 OACC security framework (披露:我是维护者和合著者) 实际上具有以下特点高效的对称查询方法,无需执行任何操作即可查找资源的权限以及哪些资源对某些内容具有权限。