我正尝试通过REST API遍历SharePoint组ID的数据集,并处理结果。问题是,我无法访问所有组(这是预期的)。在这种情况下,我想将组ID记录为“拒绝访问”,然后继续进行下一个。
当代码到达我无权访问的第一个组时,将按预期提示我输入凭据。无论我输入cred还是单击“取消”,我都会收到预期的401错误,并且脚本仅以-
退出HTTP401: DENIED - The requested resource requires user authentication.
(XHR)GET - https://{sourceSharePointSite}/_api/Web/SiteGroups/GetById({groupID})/Users
所以,是的,我得到了我无法访问的第一个组的ID,但是脚本刚刚退出,我真的需要检查其余的组(其中有400多个。请不要问)
这是我的代码...
function getMultiGroupMembers(arrGroups){// arrGroups is an object defined earlier
$(arrGroups).each(function(i){
var myId = arrGroups.results[i].Id;
var myTitle = arrGroups.results[i].Title;
log("Group ID: "+myId+" Group Name: "+myTitle+ " Members:");
getData(myId).then(function() {
log( "getMultiGroupMembers success" );
}, function() {
log( "getMultiGroupMembers fail" );
})
});
}
function getData(groupId) {
var url = myUrl + "/_api/Web/SiteGroups/GetById("+groupId+")/Users";
return $.getJSON(url).then(function(data){
log("getGroupMembers() success: " + data);
arrUsers = jsonToCsv(data.d); // convert the JSON object to CSV for exporting
log(JSON.stringify(arrUsers)); // display the results in the log
}, function(err) {
var dfd = $.Deferred();
dfd.reject(err)
return dfd.promise();
})
}
真的不确定我缺少什么。我已经在MS Edge和Chrome中尝试过
答案 0 :(得分:1)
使用此端点:_api / web / currentuser / groups。它将显示用户有权访问的所有组。使用/ _api / Web / SiteGroups获取所有组。首先过滤第二个,您会得到想要的。
也许您可以将逻辑更改为其他逻辑吗?
1。 获取您有权访问的所有组。 只需调用“ / _api / Web / SiteGroups”即可,无需任何其他参数。 SharePoint REST API必须使您仅对您的组可用。 从预定义列表中排除所有获得的组。 预定义列表中所有剩余的组就是您要查找的组,即“访问被拒绝”。
我了解此逻辑不考虑不存在的组。但是可能是您当前的逻辑还不考虑不存在的组。如果您无权访问群组,那么您将无法理解该群组是否存在。
2。 另外,如果您使用SharePoint内部部署,则可以创建Web服务。 Web服务将通过某个服务帐户下的特权提升所有组。 =) 您可以调用此Web服务方法。