我如何向 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 提问,例如:
主题对哪个打印机 ID 有 "manage" 权限? (我要答案1,2)
主体对哪个打印机 ID 有权限(或任何类型的权限)? (我要答案1,2,3)
主题对哪个打印机 ID 具有管理或管理员权限? (我要答案1,4)
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 (披露:我是维护者和合著者) 实际上具有以下特点高效的对称查询方法,无需执行任何操作即可查找资源的权限以及哪些资源对某些内容具有权限。
给定一个具有以下权限的主题:
printer:1:manage
printer:2:manage
printer:3:admin
printer:1:print
printer:4:print
我知道我可以问如果:
subject.isPermitted('printer:1:manage')
但是我该如何向 shiro 提问,例如:
主题对哪个打印机 ID 有 "manage" 权限? (我要答案1,2)
主体对哪个打印机 ID 有权限(或任何类型的权限)? (我要答案1,2,3)
主题对哪个打印机 ID 具有管理或管理员权限? (我要答案1,4)
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 (披露:我是维护者和合著者) 实际上具有以下特点高效的对称查询方法,无需执行任何操作即可查找资源的权限以及哪些资源对某些内容具有权限。