2

我正在使用远程 Rice 2.3.6(嵌入在 Kuali Coeus 5.2.1 中)作为 IAM 后端的 Grails 应用程序中工作。这方面很多方面都是成功的!但这不是:

org.kuali.rice.kim.api.role.RoleService kimRoleServiceClient

...

kimRoleServiceClient.assignPrincipalToRole(
            principalId,
            role.namespace,
            role.name,
            qualifiers)

kimRoleServiceClient.principalHasRole(
            principalId,
            [kimRoleServiceClient.getRoleIdByNamespaceCodeAndName(
                role.namespace,
                role.name)],
            qualifiers) // returns true, as expected

kimRoleServiceClient.removePrincipalFromRole(
            principalId,
            role.namespace,
            role.name,
            qualifiers)

kimRoleServiceClient.principalHasRole(
            principalId,
            [kimRoleServiceClient.getRoleIdByNamespaceCodeAndName(
                role.namespace,
                role.name)],
            qualifiers) // returns true (unexpected behavior)

无论是作为调用的结果还是作为远程 KC 中记录的异常,都不会返回任何错误catalina.out。我可以在 KC UI 中验证该角色仍然被分配,这不是两个调用之间的缓存问题——我可以等待相当长的时间并且角色仍然被分配。

有什么线索吗?

编辑:

在 rice.collab 邮件列表中建议该问题可能与KULRICE-9835 有关:removePrincipalFromRole 在 qualifier 中使用属性 id 而不是属性名称,这在 Rice 2.5.1 中标记为已修复。这可能会带来进一步的障碍,但目前即使对于没有限定符的角色,此调用也会失败,即当qualifiers上面的调用中是一个空 Map 时。

4

1 回答 1

2

您的编辑评论说您没有通过限定符,但是在这种情况下查看代码时代码会引发异常?这可能是你的问题吗?

./rice-middleware/kim/kim-impl/src/main/java/org/kuali/rice/kim/impl/role/RoleServiceImpl.java

@Override
    public void removePrincipalFromRole(String principalId, String namespaceCode, String roleName,
            Map<String, String> qualifier) throws RiceIllegalArgumentException {
        if (StringUtils.isBlank(principalId)) {
            throw new RiceIllegalArgumentException("principalId is null");
        }

        if (StringUtils.isBlank(namespaceCode)) {
            throw new RiceIllegalArgumentException("namespaceCode is null");
        }

        if (StringUtils.isBlank(roleName)) {
            throw new RiceIllegalArgumentException("roleName is null");
        }

        if (qualifier == null) {
            throw new RiceIllegalArgumentException("qualifier is null");
        }...
于 2016-02-19T19:11:39.147 回答