使用Javascript客户端对象模型获取用户可以访问的网站集中的所有sharepoint站点

时间:2015-02-09 22:03:34

标签: sharepoint-2010 client-object-model sharepoint-clientobject

我想使用用户有权访问的JSOM显示网站集中的所有网站。换句话说,我只需要找到用户可以在网站集中访问的网站集合。我能够获得所有网站,但如果用户没有某些网站的权限,它就无法工作。

3 个答案:

答案 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()不会返回用户正在寻找的结果。所以上面的代码不起作用。