[英]CRM 365 (Web API): How to check if a user has read access to a certain CRM-record?
Dynamics CRM 365 v9.1(内部部署)。 Web API + C#。
如何检查用户是否具有对某个 CRM 记录的读取权限? 我有一组Lead
实体 ID。 我必须只过滤当前用户具有读取权限的那些。
有一个绑定 function 称为retrieveprincipalaccess
将用户实体类型和 ID 和 Target 作为实体和它的 ID,你应该有你的结果。
下面是来自 webapi (js) 和 XMLHttpRequest 的两个代码示例。
// WARNING: Xrm.WebApi doesn't support Synchronous mode
// THE CODE HAS BEEN GENERATED CONSIDERING THESE WARNINGS
var execute_RetrievePrincipalAccess_Request = {
// Parameters
entity: { entityType: "systemuser", id: "f7c76548-0bb2-ea11-a816-000d3a3a1be9" }, // entity
Target: { "@odata.type": "Microsoft.Dynamics.CRM.account", accountid : "2fe32f22-d01d-ea11-80fa-005056936c69" }, // mscrm.crmbaseentity
getMetadata: function () {
return {
boundParameter: "entity",
parameterTypes: {
entity: { typeName: "mscrm.systemuser", structuralProperty: 5 },
Target: { typeName: "mscrm.crmbaseentity", structuralProperty: 5 }
},
operationType: 1, operationName: "RetrievePrincipalAccess"
};
}
};
Xrm.WebApi.online.execute(execute_RetrievePrincipalAccess_Request).then(
function success(response) {
if (response.ok) { return response.json(); }
}
).then(function (responseBody) {
var result = responseBody;
console.log(result);
// Return Type: mscrm.RetrievePrincipalAccessResponse
// Output Parameters
var accessrights = result["AccessRights"]; // mscrm.AccessRights
}).catch(function (error) {
console.log(error.message);
});
var req = new XMLHttpRequest();
req.open("GET", Xrm.Utility.getGlobalContext().getClientUrl() + "/api/data/v9.2/systemusers(f7c76548-0bb2-ea11-a816-000d3a3a1be9)/Microsoft.Dynamics.CRM.RetrievePrincipalAccess(Target=@Target)?@Target=%7B%20%22%40odata.type%22%3A%20%22Microsoft.Dynamics.CRM.account%22%2C%20accountid%20%3A%20%222fe32f22-d01d-ea11-80fa-005056936c69%22%20%7D", false);
req.setRequestHeader("OData-MaxVersion", "4.0");
req.setRequestHeader("OData-Version", "4.0");
req.setRequestHeader("Accept", "application/json");
req.onreadystatechange = function () {
if (this.readyState === 4) {
req.onreadystatechange = null;
if (this.status === 200) {
var result = JSON.parse(this.response);
console.log(result);
// Return Type: mscrm.RetrievePrincipalAccessResponse
// Output Parameters
var accessrights = result["AccessRights"]; // mscrm.AccessRights
} else {
console.log(this.responseText);
}
}
};
req.send();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.