我怎么能问apache shiro关于对象id

时间:2016-05-25 14:33:25

标签: shiro

鉴于主题具有以下权限:

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

我知道我可以问:

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

但我怎么问shiro问题,如:

  • 对于哪个打印机ID,主题具有“管理”权限? (我想要答案1,2)

  • 对于哪个打印机ID,主题是否具有权限(或任何类型)? (我想要答案1,2,3)

  • 对于哪个打印机ID,主题具有管理或管理权限? (我想要答案1,4)

1 个答案:

答案 0 :(得分:1)

Apache Shiro的API仅提供权限或角色的检查和断言;它没有提供任何查找程序方法来查找主题有权访问的内容,或查找哪些主题拥有权限。

您可以探索在findPermissions()中实施自己的AuthorizingRealm并获取查询权限,并收集queryPermission.implies(grantedPermission)返回{{}的主题的所有可用权限1}},有点沿着这些方向:

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; } 执行检查的方式有implies的反比关系。

如果您还没有致力于Apache Shiro,那么,开源OACC security framework (披露:我是维护者和共同作者)实际上具有高效的对称查询方法找到资源的权限,以及哪些资源拥有某些权限,而无需实现任何内容。