Dynamics 365 Web API模擬使用者

vic0228發表於2018-06-11

   在實際業務場景中,使用者只能看到自己許可權內的資料,比如客戶資料,公司的銷售員只能看到屬於自己的客戶資料,但有這麼個場景又需要某個銷售員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這個頭部後再執行,發現頁面會很奇怪的彈個登入框出來,如果你點了取消則會看到下述彈框,說你沒有模擬其他使用者進行操作的許可權。


    只要給安全形色加上下圖中的許可權即可,這樣你就可以模擬其他使用者進行一些資料操作了。


相關文章