Sharepoint 2010 使用Javascript客户端对象模型获取网站集中用户有权访问的所有sharepoint网站

Sharepoint 2010 使用Javascript客户端对象模型获取网站集中用户有权访问的所有sharepoint网站,sharepoint-2010,sharepoint-clientobject,Sharepoint 2010,Sharepoint Clientobject,我想使用用户有权访问的JSOM显示网站集中的所有网站。换句话说,我只需要在网站集中查找用户有权访问的网站集合。我可以获取所有网站,但如果用户没有访问某些网站的权限,则无法获取所有网站。如果您可以使用API,则我建议您执行以下操作以返回当前用户的所有子网站 using(SPSite site = new SPSite("http://example/site/")) { using (SPWeb web = site.OpenWeb()) { SPWebCollection webColl

我想使用用户有权访问的JSOM显示网站集中的所有网站。换句话说,我只需要在网站集中查找用户有权访问的网站集合。我可以获取所有网站,但如果用户没有访问某些网站的权限,则无法获取所有网站。

如果您可以使用API,则我建议您执行以下操作以返回当前用户的所有子网站

using(SPSite site = new SPSite("http://example/site/"))
{
using (SPWeb web = site.OpenWeb())
{
    SPWebCollection webCollection = web.GetSubwebsForCurrentUser();
}
}

注意:正如Helm Sterk在下面的评论中指出的,GetSubwebsForCurrentUser()不会返回用户正在搜索的结果。所以上面的代码不起作用

您好,下面的代码片段可能会对您有所帮助

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)
);
GetSubWebForCurrentUser-使用SP.SubwebQuery类型的参数,可以将其保留为null。 使用此代码获得的web集合只是一个级别。您将无法获得子网站中的子网站。为此,您需要从根站点开始递归地在每个SP.Web对象上执行相同的语句。

返回一个经过安全性调整的(用户有权访问)子站点集合(下面只有一个级别)

示例

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());
    }
);
var ctx=SP.ClientContext.get_current();
var webs=ctx.get_web().getSubwebsForCurrentUser(null);
ctx.荷载(腹板);
ctx.executeQueryAsync(
函数(){
对于(var i=0;i

如果您对网站集合中的所有子网站感兴趣,您可以考虑以下方法。

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(成功,错误) { var ctx=SP.ClientContext.get_current(); var web=ctx.get_site().get_rootWeb(); var结果=[]; 风险值水平=0; var getAllSubwebsForCurrentUserInner=函数(web、结果、成功、错误) { 级别++; var ctx=web.get_context(); var webs=web.getSubwebsForCurrentUser(null); ctx.load(网站,“包括(标题、网站)”; ctx.executeQueryAsync( 函数(){ 对于(var i=0;i0){ getAllSubwebsForCurrentUserInner(web、结果、成功、错误); } } 级别--; 如果(级别==0&&success) 成功(结果); }, 误差); }; getAllSubwebsForCurrentUserInner(web、结果、成功、错误); }
用法

getAllSubwebsForCurrentUser(
功能(所有网站){
for(var i=0;i
它不适用于具有“访问者”访问权限的用户,。。转到failure()方法“error”,。。当我从Include:ctx.load(Webs,'Include(Title,Webs);)中删除站点时,它正在发挥作用并走向成功。。任何帮助??getSubwebsForCurrentUser()只返回当前站点下的一级站点。它并不影响子公司,而是子公司。
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());
});