0

Я хочу отображать все сайты в семействе сайтов с помощью JSOM, к которым пользователь имеет доступ. Другими словами, мне нужно найти коллекцию сайтов, к которым пользователь имеет доступ в семействе сайтов. Я могу получить все веб-страницы, но он не работает, если у пользователя нет разрешений на некоторые веб-сайты.Получить все сайты sharepoint в семействе сайтов, к которым пользователь имеет доступ, используя объектную модель клиента Javascript

ответ

-3

Если вы можете использовать API вместо этого, я бы предложил вам сделать следующее, чтобы вернуть все под веб-страницы для текущего пользователя.

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

Примечание: Как отметил Helm Sterk в комментарии ниже, GetSubwebsForCurrentUser() не будет возвращать результат, который ищет пользователь. Таким образом, код выше не работал.

+1

getSubwebsForCurrentUser() возвращает только один уровень сайтов под текущим сайтом. Он не улавливает sub, subsites. –

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, который вы можете оставить утратившим. Веб-коллекция, которую вы используете с помощью этого кода, всего на один уровень. Вы не получите подсайты подсайтов. Для этого вам нужно выполнить одни и те же утверждения на каждом объекте SP.Web, который вы получаете - рекурсивно - начиная с корневой сети.

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

Он не работает для пользователей с доступом «Посетители» .. Он переходит к ошибке() метода «ошибка», .. когда я удаляю веб-страницы из Include: ctx.load (веб-страницы, «Include (Title, Webs)») ; , Он работает и переходит к функции Успеха. Любая помощь? –