Связать роль с пользователем Microsoft Dynamics CRM (Rest API)
У меня есть случай, когда мне нужно создать роль, создать пользователя в экземпляре crm и связать роль с пользователем.
Я исследовал API для создания пользователя и создания роли.
Ниже приведен код:
private void createUser(IntegrationUserDTO integrationUserDTO, STSDto stsDetails, CRMAuthContext crmAuthContext)
throws IntegrationsException {
Map<String, Object> requestBody = new HashMap<>();
URI uri = new MSCRMHttpDelegate().odataUriBuilder(crmAuthContext.getCrmApiUrl())
.appendEntitySetSegment("systemusers").build();
HttpPost httpPost = new HttpPost(uri.toString());
httpPost.setHeader("Authorization", "Bearer " + crmAuthContext.getAccessToken());
httpPost.setHeader("Accept", MediaType.APPLICATION_JSON);
httpPost.setHeader("OData-MaxVersion", "4.0");
httpPost.setHeader("OData-Version", "4.0");
httpPost.setHeader("Content-Type", "application/json");
requestBody.put("accessmode", "4");
requestBody.put("applicationid", UUID.fromString(stsDetails.getClientId()));
requestBody.put("firstname", integrationUserDTO.getUsername());
requestBody.put("lastname", integrationUserDTO.getSecretToken());
requestBody.put("internalemailaddress", integrationUserDTO.getExtraParams());
requestBody.put("isintegrationuser", true);
MSCRMUser user = getBusinessUnitId(crmAuthContext);
if (StringUtils.isNoneBlank(user.getBusinessUnitId())) {
requestBody.put("businessunitid@odata.bind",
"/businessunits(" + UUID.fromString(user.getBusinessUnitId()) + ")");
}
if (StringUtils.isNoneBlank(user.getOrganizationId())) {
requestBody.put("organizationid", UUID.fromString(user.getOrganizationId()));
}
try {
httpPost.setEntity(new StringEntity(
new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(requestBody)));
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
if (response.getStatusLine().getStatusCode() >= 400) {
log.info("error in adding privileges to role at microsoft instance =");
throw new IntegrationsException(IntegrationsErrorCode.CRM_UNAUTHORIZED_ACCESS);
}
}
} catch (Exception e) {
throw new IntegrationsException(IntegrationsErrorCode.INTERNAL_ERROR, e);
}
}
private void createRole(IntegrationUserDTO integrationUserDTO, STSDto stsDetails, CRMAuthContext crmAuthContext)
throws IntegrationsException {
Map<String, Object> requestBody = new HashMap<>();
requestBody.put("name", ROLE_NAME);
MSCRMUser user = getBusinessUnitId(crmAuthContext);
if (StringUtils.isNoneBlank(user.getBusinessUnitId())) {
requestBody.put("businessunitid@odata.bind",
"/businessunits(" + UUID.fromString(user.getBusinessUnitId()) + ")");
}
if (StringUtils.isNoneBlank(user.getOrganizationId())) {
requestBody.put("organizationid", UUID.fromString(user.getOrganizationId()));
}
URI uri = new MSCRMHttpDelegate().odataUriBuilder(crmAuthContext.getCrmApiUrl()).appendEntitySetSegment("roles")
.build();
HttpPost httpPost = new HttpPost(uri.toString());
httpPost.setHeader("Authorization", "Bearer " + crmAuthContext.getAccessToken());
httpPost.setHeader("Accept", MediaType.APPLICATION_JSON);
httpPost.setHeader("OData-MaxVersion", "4.0");
httpPost.setHeader("OData-Version", "4.0");
httpPost.setHeader("Content-Type", "application/json");
try {
httpPost.setEntity(new StringEntity(
new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create().toJson(requestBody)));
try (CloseableHttpResponse response = httpClient.execute(httpPost)) {
if (response.getStatusLine().getStatusCode() >= 400) {
log.info("error in adding privileges to role at microsoft instance =");
throw new IntegrationsException(IntegrationsErrorCode.CRM_UNAUTHORIZED_ACCESS);
}
}
} catch (Exception e) {
throw new IntegrationsException(IntegrationsErrorCode.INTERNAL_ERROR, e);
}
}
Я не могу найти API Rest, чтобы связать пользователя с ролью. Я видел мыльные API, но не видел остальных API. Я исследовал в документах динамической CRM, я не видел ничего, связанного с ассоциацией ролей с сущностью. Кто-нибудь знает остальные API, чтобы связать роль с пользователем?
2 ответа
Вы можете использовать Web API для отправки запроса, чтобы связать пользователя с данной ролью.
Отношение между пользователем и ролью называется systemuserroles_association. Таким образом, вы должны отправить запрос в следующем формате:
POST [Organization URI]/api/data/v9.0/systemusers(00000000-0000-0000-0000-000000000002)/systemuserroles_association/$ref HTTP/1.1
Content-Type: application/json
Accept: application/json
OData-MaxVersion: 4.0
OData-Version: 4.0
{
"@odata.id":"[Organization URI]/api/data/v9.0/roles(00000000-0000-0000-0000-000000000001)"
}
Это работает для нескольких ролей?
{
"@odata.id":"[Organization URI]/api/data/v9.0/roles( [**roleId1**] )"
"@odata.id":"[Organization URI]/api/data/v9.0/roles( [**roleId2**] )"
"@odata.id":"[Organization URI]/api/data/v9.0/roles( [**roleId3**] )"
"@odata.id":"[Organization URI]/api/data/v9.0/roles( [**roleId4**] )"
"@odata.id":"[Organization URI]/api/data/v9.0/roles( [**roleId5**] )"
"@odata.id":"[Organization URI]/api/data/v9.0/roles( [**roleId6**] )"
}
Просто мешок легкости для других
Используя почтальон, вы можете отправить запрос в двух форматах: