0

我正在使用 Alfresco 4.2 并试图找到一些用户的最爱,但我使用的 webscript 仅返回当前用户的结果。我确定存在我正在调查的用户。

我应该怎么办?我究竟做错了什么?

这是有效的 webscript 调用:

domain.com/alfresco/api/-default-/public/alfresco/versions/1/people/-me-/favorites

这是一个不起作用的:

domain.com/alfresco/api/-default-/public/alfresco/versions/1/people/user@tenant.com/favorites

并返回以下内容:

{"error":{"statusCode":404,"briefSummary":"04203980 The entity with id: user@tenant.com was not found","stackTrace":"[org.alfresco.rest.api.impl.PeopleImpl.validatePerson(PeopleImpl.java:155)

顺便说一句,/favorite-sites而不是/favorites适用于所有人。

4

1 回答 1

2

404 是一种误导。尝试将 URL 用于不存在的用户。这也将返回 404,但错误会有所不同。访问现有用户会给出

The entity with id: existinguser was not found

而一个不存在的用户给出

The entity with id: personId is null. was not found

如果您尝试获取其他用户的收藏夹,则 HTTP 响应状态应为 403。

您无法访问其他用户的收藏夹,因为该类org.alfresco.rest.api.impl.PeopleImpl会检查调用用户是否与请求收藏夹的用户相同。在 Alfresco 5.0d 中,相关代码是:

public String validatePerson(String personId, boolean validateIsCurrentUser)
{
    if(personId.equalsIgnoreCase(DEFAULT_USER))
    {
        personId = AuthenticationUtil.getFullyAuthenticatedUser();
    }

    personId = personService.getUserIdentifier(personId);
    if(personId == null)
    {
        // "User " + personId + " does not exist"
        throw new EntityNotFoundException("personId is null.");
    }

    if(validateIsCurrentUser)
    {
        String currentUserId = AuthenticationUtil.getFullyAuthenticatedUser();
        if(!currentUserId.equalsIgnoreCase(personId))
        {
            throw new EntityNotFoundException(personId);
        }
    }

    return personId;
}
于 2016-05-20T12:13:52.737 回答