#c# #sharepoint
#c# #sharepoint
Вопрос:
Я пытаюсь получить весь сайт и дочерний сайт в sharepoint, но мне отказано в доступе.
Я читал об использовании свойства GetSubwebsForCurrentUser(), но получаю то же сообщение.
Мой код следующий
foreach (SPWebApplication webApp in SPWebService.ContentService.WebApplications)
{
foreach (SPSite siteCollection in webApp.Sites)
{
foreach(SPWeb web in siteCollection.RootWeb.GetSubwebsForCurrentUser())
{
dropDownSite.Items.Add(web.Url);
}
}
}
пожалуйста, мне нужна помощь! Спасибо!
Комментарии:
1. Откуда выполняется этот код? Веб-часть? Задание таймера? Что-то еще?
2. Просто предупреждаю, теперь есть сайт SharePoint stack exchange . Он в бета-версии, но вы должны опубликовать его там (или модератор мог бы перенести этот вопрос туда). Это поможет сайту получить больше возможностей 🙂
3. Вы ищете пользовательские списки сайтов на основе контекста? Если да, то делаете ли вы это просто для заполнения выпадающего списка? Если это так, я бы предложил portalsitemapprovider. Кроме того, ваш код оставит каждый из этих веб-сайтов в недоступном состоянии, что приведет к огромной утечке памяти при каждом запуске
Ответ №1:
Вероятно, вам потребуется вызвать SPSecurity.RunWithElevatedPrivileges(delegate())
При желании вы могли бы создать встроенный делегат, что-то вроде:
SPSecurity.RunWithElevatedPrivileges(delegate()
{
foreach (SPWebApplication webApp in SPWebService.ContentService.WebApplications)
{
foreach (SPSite siteCollection in webApp.Sites)
{
foreach(SPWeb web in siteCollection.RootWeb.GetSubwebsForCurrentUser())
{
dropDownSite.Items.Add(web.Url);
}
}
}
});
Ответ №2:
Просто чтобы убедиться, выполняется ли этот код на сервере, на котором размещен портал Sharepoint? Какую версию Sharepoint вы используете?
Кроме того, имеет ли смысл использовать веб-сервисы, предоставляемые Sharepoint? http://msdn.microsoft.com/en-us/library/aa979690 (v=office.12).aspx
Если вы запускаете этот код на том же сервере, что и SP, то убедитесь, что ваши учетные данные имеют доступ к SP. Если вы вызываете это с веб-сайта, также убедитесь, что вы не работаете как «Анонимный».
В целом, я думаю, что использование веб-сервисов — это самый простой способ заставить его работать. Но убедитесь, что у вас есть отправляемые правильные разрешения и что у этого пользователя есть доступ (в конфигурациях SP) к этим данным.
Надеюсь, это поможет!
Ответ №3:
Если вы используете SPSite.Появляется сообщение об отказе в доступе ко всем веб-сайтам! Это утверждение верно только до тех пор, пока текущий пользователь является администратором семейства сайтов
Таким образом, для всех пользователей эта функция получает все сайты и подсайты.
public static IEnumerable<SPWeb> DescendantSites(this SPWeb input)
{
foreach (SPWeb web in input.GetSubwebsForCurrentUser())
{
yield return web;
foreach (var subnode in web.DescendantSites())
yield return subnode;
}
}