我想使用用户有权访问的JSOM显示网站集中的所有网站。换句话说,我只需要找到用户可以在网站集中访问的网站集合。我能够获得所有网站,但如果用户没有某些网站的权限,它就无法工作。
答案 0 :(得分:3)
SP.Web.getSubwebsForCurrentUser Method返回一个安全修剪(用户有访问权限)子网站集合(下面只有一个级别)
示例强>
var ctx = SP.ClientContext.get_current();
var webs = ctx.get_web().getSubwebsForCurrentUser(null);
ctx.load(webs);
ctx.executeQueryAsync(
function() {
for(var i=0;i< webs.get_count();i++) {
var web = webs.getItemAtIndex(i);
console.log(web.get_title());
}
},
function(sender,args){
console.log(args.get_message());
}
);
如果您对网站集中的所有子网感兴趣,可以考虑以下方法。
function getAllSubwebsForCurrentUser(success,error)
{
var ctx = SP.ClientContext.get_current();
var web = ctx.get_site().get_rootWeb();
var result = [];
var level = 0;
var getAllSubwebsForCurrentUserInner = function(web,result,success,error)
{
level++;
var ctx = web.get_context();
var webs = web.getSubwebsForCurrentUser(null);
ctx.load(webs,'Include(Title,Webs)');
ctx.executeQueryAsync(
function(){
for(var i = 0; i < webs.get_count();i++){
var web = webs.getItemAtIndex(i);
result.push(web);
if(web.get_webs().get_count() > 0) {
getAllSubwebsForCurrentUserInner(web,result,success,error);
}
}
level--;
if (level == 0 && success)
success(result);
},
error);
};
getAllSubwebsForCurrentUserInner(web,result,success,error);
}
用法
getAllSubwebsForCurrentUser(
function(allwebs){
for(var i = 0; i < allwebs.length;i++){
console.log(allwebs[i].get_title());
}
},
function(sendera,args){
console.log(args.get_message());
});
答案 1 :(得分:0)
以下代码段可以为您提供帮助。
var ctx = SP.ClientContext.get_current();
var web = ctx.get_web();
ctx.load(web);
var webCollection = web.getSubwebsForCurrentUser(null);
ctx.load(webCollection);
ctx.executeQueryAsync(
Function.createDelegate(this,this.onSuccess),
Function.createDelegate(this,this.onError)
);
getSubwebsForCurrentUser - 使用SP.SubwebQuery类型的参数,您可以将其保留为null。 使用此代码获得的Web集合只有一个级别。你不会得到子网站的子网站。为此,您需要在每个SP.Web对象上执行相同的语句 - 递归 - 从根网站开始。
答案 2 :(得分:-3)
如果您可以使用API,那么我建议您执行以下操作以返回当前用户的所有子网站。
using(SPSite site = new SPSite("http://example/site/"))
{
using (SPWeb web = site.OpenWeb())
{
SPWebCollection webCollection = web.GetSubwebsForCurrentUser();
}
}
注意:正如Helm Sterk在下面的评论中所指出的,GetSubwebsForCurrentUser()不会返回用户正在寻找的结果。所以上面的代码不起作用。