2016-01-29 1 views
2

Я работаю в приложении Grails, которое использует удаленный Rice 2.3.6 (встроенный в Kuali Coeus 5.2.1) в качестве IAM-сервера. Многие аспекты этого успеха! Но это один не является:Kuali Rice remote 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, что роль все еще назначена, и это не проблема кэширования между двумя вызовами - я могу подождать респектабельное количество времени и роль все еще назначена.

Любые подсказки?

EDIT:

Было предложено на rice.collab списке рассылки, что проблема может быть связана с KULRICE-9835: removePrincipalFromRole uses attribute id instead of attribute name in qualifier, который помечен как фиксируется в Rice 2.5.1. Это может стать дополнительным препятствием, но на данный момент этот вызов не выполняется даже для ролей без квалификатора, то есть когда qualifiers в вызове выше представляет собой пустую карту.

ответ

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

Если это вопрос, то первый вызов не удался, и Дэн не утверждал бы, что второй вызов возвращает true. –

+0

Я передаю пустой классификатор Map (Groovy's '[:]'), а не 'null', поэтому я должен быть здесь хорошо. Я делаю то же самое при использовании 'assignPrincipalToRole', без проблем; Я отредактирую вопрос, чтобы сделать это более ясным. –

+0

Интересно, кто голосовал за ответ, так как это не правильно? Извините, Кен, я пропустил комментарий Дэна о том, что второй вызов возвращает true, и я не знаю, как бы я знал, был ли этот вызов передан любым квалификаторам, поскольку это не вызов api, к которому я обращался. Я, возможно, полностью не хватаю вашу точку, но я просто смотрел на код и думал, что это может быть на основе комментария. –