Dynamics 365 Web API模拟用户

   在实际业务场景中,用户只能看到自己权限内的数据,比如客户数据,公司的销售员只能看到属于自己的客户数据,但有这么个场景又需要某个销售员A去读取另一个销售员B的数据(当然他是没有权限读取的),这种场景下该怎么办,当然这个假设场景不一定合理,只是一种假设来引出本篇要讲的内容。

   上述场景即可以使用模拟用户来操作,在JS中读取B的数据时,我们可以模拟B的权限而不是当前A的权限。

    只需在常规的get请求头部加一个MSCRMCallerID,附上需要模拟的用户的userid

   var req = new XMLHttpRequest();
    req.open("get",Xrm.Page.context.getClientUrl() + "/api/data/v8.2/accounts(3E6DB783-B65C-E811-80DC-0017FA01322A)?$select=name", false);
    req.setRequestHeader("Accept", "application/json");
    req.setRequestHeader("Content-Type", "application/json; charset=utf-8");
    req.setRequestHeader("OData-MaxVersion", "4.0");
    req.setRequestHeader("OData-Version", "4.0");
    req.setRequestHeader("Prefer", "odata.include-annotations=\"OData.Community.Display.V1.FormattedValue\"");
    req.setRequestHeader("MSCRMCallerID", "FCCBB09D-D559-E811-80D4-0017FA01322A");
    req.send();
    if (req.status == 200)
        var data= JSON.parse(req.responseText);
    else
        throw new Error(JSON.parse(req.responseText).error.message);

  如果不加MSCRMCallerID这个头部,则请求数据时会报错,提示当前用户并没有读取该条数据的权限

    当我们加上了MSCRMCallerID这个头部后再运行,发现页面会很奇怪的弹个登录框出来,如果你点了取消则会看到下述弹框,说你没有模拟其他用户进行操作的权限。


    只要给安全角色加上下图中的权限即可,这样你就可以模拟其他用户进行一些数据操作了。


猜你喜欢

转载自blog.csdn.net/woniu1104913/article/details/80649615