2010-04-20 5 views
3

Я разработки окна приложения, что переговоры с SharePoint с помощью встроенного в веб-сервисов, и я хочу, чтобы получить все типы контента, доступные на сайте SharePoint,Как получить Типы контента

Я пытаюсь использование

Web.Webs WebsService = new Web.Webs(); WebsService.Credentials = учетные данные; WebsService.Url = "URL-адрес веб-службы"; XmlNode listOfContentTypes = WebsService.GetContentTypes();

Если у учетных данных есть права администратора, я могу получить список всех доступных типов контента. Но если учетные данные не имеют прав администратора, генерируется исключение 401 (не достаточное разрешение).

Мой вопрос:
Как я могу получить все типы контента на сайте SharePoint, если у меня нет администратора?

ответ

1

Если вы хотите использовать веб-службы OOB, вам необходимо будет предоставить учетные данные (имеющие достаточные права) в вызывающем приложении.

 Web.Webs WebService = new Web.Webs(); 
     WebService.Credentials = new NetworkCredential("username", "password"); 
     XmlNode list = WebService.GetContentTypes(); 

Как вы получите эти полномочия до вас ...

+0

У меня есть форма, в которой пользователи заполняют домен пользователя и пароль, затем я получаю идентификатор типа содержимого (который я буду использовать для запроса всех элементов, имеющих этот тип контента) из xml файл, расположенный в общем местоположении, где я не могу его изменить, и для создания этого запроса мне нужно знать имя типа контента из его идентификатора. Как может пользователь с привилегиями только для чтения узнать имя типа контента из его веб-идентификатор? В объектной модели проблема решена с помощью SpSecurity.RunWithelevatedprivilege ..., что мне нужно делать в веб-сервисах? можно ли получить типы веб-контента? – Gaby

+0

Существует не эквивалент для SPSecurity.RunWithElevatedPrivileges, когда дело доходит до веб-служб, и не без оснований. Если бы это было так, любой мог написать программу, которая могла бы выполнять код на сервере SharePoint в качестве администратора без физического доступа к серверу. Это будет довольно серьезная дыра в безопасности. –

0

Вы можете написать веб-службу обертки, которая вызывает веб-сервис Webs (или даже использует объектную модель SharePoint) с необходимыми учетными данными. Эта служба обертки может быть развернута на сервере SharePoint.

Ваше собственное приложение может затем вызвать службу обертки без необходимости предоставления правильных учетных данных.

+0

Мне нужно сделать это с помощью sharepoint, встроенного в веб-сервлет. Могу ли я получить типы контента без написания пользовательского веб-сервиса? – Gaby

+0

Да, см. Другой ответ –

2

Я сделал некоторые ковыряться в рефлектор, чтобы увидеть, какие разрешения на самом деле требуется. Проверьте метод ниже, что вниз по цепочке вызовов от метода GetContentTypes() службы:

public string GetContentTypeTemplates() 
{ 
    SPWeb web = SPContext.GetContext(HttpContext.Current).Web; 
    web.CheckPermissions(SPBasePermissions.EmptyMask | SPBasePermissions.ManageLists); 
    web.CheckPermissions(SPBasePermissions.EmptyMask | SPBasePermissions.AddAndCustomizePages); 
    return this.GetGeneralContentTypes(web.AvailableContentTypes); 
} 

Из этого мы можем собрать, что SharePoint требует, чтобы у вас есть ManageLists и AddAndCustomizePages разрешения для получения всех типов контента.

Итак, одним из решений для вас может быть обеспечение того, чтобы учетная запись клиента имела эти разрешения, возможно, путем создания настраиваемого уровня разрешений или, если работала на сайте публикации, добавление учетной записи в группу дизайнеров.

Смежные вопросы