如果登录用户没有使用 JSOM 在线共享点中的网站集的权限,如何获取网站集下的所有子网站?
How to get all the subsites under a site collection if logged in user doesn't have permissions on site collection in sharepoint online using JSOM?
当我尝试使用 jsom 在线获取 Sharepoint 中网站集下的所有子网站时,如果登录用户没有网站集的权限,我将无法检索所有子网站。
但是如果登录用户对网站集有权限,我可以获取网站集下的所有子网站。
我想,即使用户对网站集有权限,也可以使用 JavaScript 在线检索 Sharepoint 中网站集下的所有子网站。
这是不可能的,因为数据是根据用户有权访问的内容进行安全调整的。能够提升客户端的权限将是一个巨大的安全漏洞。人们通常最终做的通常是在所有用户组的任何地方都授予非常小的权限,或者使用中继自定义 API 和具有权限的服务帐户。
getAllWebs: function (siteUrl, success, error) {
var ctx = new SP.ClientContext(siteUrl);
var web = ctx.get_site().get_rootWeb();
var result = [];
var level = 0;
var getAllWebsInner = function (web, result, success, error, isChild, siteUrl) {
level++;
var ctx = web.get_context();
var webs = web.get_webs();
ctx.load(webs, 'Include(Title,Url,Webs)');
ctx.executeQueryAsync(
function () {
for (var i = 0; i < webs.get_count(); i++) {
var web = webs.getItemAtIndex(i);
if (isChild)
siteHierarchy.subSiteInfo.push({ Title: web.get_title(), SiteUrl: web.get_url(), ParentUrl: siteUrl });
else
siteHierarchy.siteInfo.push({ Title: web.get_title(), SiteUrl: web.get_url(), Subsite: [] });
result.push(web);
if (web.get_webs().get_count() > 0) {
getAllWebsInner(web, result, success, error, true, web.get_url());
}
}
level--;
if (level == 0 && success) {
success(result);
}
},
error);
};
getAllWebsInner(web, result, success, error, false, siteUrl);
}
基于 "Vadim Gremyachev" 在 https://sharepoint.stackexchange.com/questions/130403/most-efficient-way-to-get-all-sub-sites-under-a-site-collection-sub-site-using-j 的回答。
当我尝试使用 jsom 在线获取 Sharepoint 中网站集下的所有子网站时,如果登录用户没有网站集的权限,我将无法检索所有子网站。
但是如果登录用户对网站集有权限,我可以获取网站集下的所有子网站。
我想,即使用户对网站集有权限,也可以使用 JavaScript 在线检索 Sharepoint 中网站集下的所有子网站。
这是不可能的,因为数据是根据用户有权访问的内容进行安全调整的。能够提升客户端的权限将是一个巨大的安全漏洞。人们通常最终做的通常是在所有用户组的任何地方都授予非常小的权限,或者使用中继自定义 API 和具有权限的服务帐户。
getAllWebs: function (siteUrl, success, error) {
var ctx = new SP.ClientContext(siteUrl);
var web = ctx.get_site().get_rootWeb();
var result = [];
var level = 0;
var getAllWebsInner = function (web, result, success, error, isChild, siteUrl) {
level++;
var ctx = web.get_context();
var webs = web.get_webs();
ctx.load(webs, 'Include(Title,Url,Webs)');
ctx.executeQueryAsync(
function () {
for (var i = 0; i < webs.get_count(); i++) {
var web = webs.getItemAtIndex(i);
if (isChild)
siteHierarchy.subSiteInfo.push({ Title: web.get_title(), SiteUrl: web.get_url(), ParentUrl: siteUrl });
else
siteHierarchy.siteInfo.push({ Title: web.get_title(), SiteUrl: web.get_url(), Subsite: [] });
result.push(web);
if (web.get_webs().get_count() > 0) {
getAllWebsInner(web, result, success, error, true, web.get_url());
}
}
level--;
if (level == 0 && success) {
success(result);
}
},
error);
};
getAllWebsInner(web, result, success, error, false, siteUrl);
}
基于 "Vadim Gremyachev" 在 https://sharepoint.stackexchange.com/questions/130403/most-efficient-way-to-get-all-sub-sites-under-a-site-collection-sub-site-using-j 的回答。