繁体   English   中英

CRM 365(Web API):如何检查用户是否具有对某个 CRM 记录的读取权限?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM