How is the multi tenant user query supposed to work?
I'm using the Automation API to create users for isolated tenants with the multi-tenant plugin installed.
Before creating the user I check if they already exist by querying using something like this:
Blob blob = (Blob) session.newRequest("Services.QueryUsers")
.set("pattern", userId)
.set("tenantId", tenantId)
.execute();
Sadly, however, even if I have a user with that userId in that tenant I get back 0 users.
I believe that this is because of the code in QueryUsers
which is part of the multi-tenant plugin. As part of the run()
method there is code which does this:
Map<String, Serializable> filter = new HashMap<String, Serializable>();
for (String field : FULLTEXT_FIELDS) {
filter.put(field, pattern);
if (!StringUtils.isBlank(tenantId)) {
filter.put("tenantId", tenantId);
}
users.addAll(userManager.searchUsers(filter, filter.keySet()));
}
however I believe that the creation of the filter should be moved inside the loop like this:
for (String field : FULLTEXT_FIELDS) {
Map<String, Serializable> filter = new HashMap<String, Serializable>();
filter.put(field, pattern);
if (!StringUtils.isBlank(tenantId)) {
filter.put("tenantId", tenantId);
}
users.addAll(userManager.searchUsers(filter, filter.keySet()));
}
which will give you a match for a userId, lastname or firstName. Currently even though I use an existing userId I get nothing back as the Set
used for FULLTEXT_FIELDS
supplies lastname first and I am never matching that.
I've patched my version and it seems to work fine - What is the protocol for pull requests etc?
Thanks