2016-01-29 37 views
2

我正在使用远程Rice 2.3.6(嵌入在Kuali Coeus 5.2.1中)作为IAM后端的Grails应用程序。这很多方面都是成功的!但是,这个人是不是:返回Kuali Rice远程API:removePrincipalFromRole无提示失败

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 uses attribute id instead of attribute name in qualifier,为固定水稻2.5.1被标记上。这可能会带来进一步的障碍,但是目前这个呼叫即使对于没有限定符的角色也是失败的,即当上述呼叫中的qualifiers是空的Map时。

回答

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"); 
     }... 
+0

如果是这样的问题,第一次调用将失败,Dan不会断言第二次调用返回true。 –

+0

我传递了一个空的限定符Map(Groovy的'[:]'),而不是'null',所以我应该在这里很好。我使用'assignPrincipalToRole'时没有任何问题;我会编辑这个问题,使其更清晰。 –

+0

我不知道是谁投了答案,因为它不正确?对不起肯,我错过了丹的评论,第二个调用返回true,我不知道我怎么知道这个调用是否通过了任何限定符,因为它不是我正在处理的api调用。我可能完全错过了你的观点,但我只是看着代码,并认为它可能是基于评论的情况。 –