2010-04-20 53 views
3

我正在開發一個Windows應用程序,會談通過SharePoint其內置的Web服務,我想在SharePoint網站上提供的所有內容類型,如何獲得內容類型

我想使用

Web.Webs WebsService =新Web.Webs(); WebsService.Credentials = credentials; Web服務.Url =「網絡服務的URL」; XmlNode listOfContentTypes = WebsService.GetContentTypes();

如果憑據具有管理員權限,我可以得到所有可用的內容類型列表中,但如果憑據沒有管理員權限的401拋出異常(不足夠多的權限)。

我的問題是:
如何獲取SharePoint網站上可用的所有內容類型(如果我沒有管理員特權?

回答

1

如果您希望使用OOB Web服務,那麼您需要在您的調用應用程序提供的憑據(即具有足夠的權限)。

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

如何你得到這些憑據是你......

+0

我有一個表格,用戶填寫用戶名域和密碼,然後我從XML獲取內容類型ID(我將用它來查詢具有此內容類型的所有項目)文件位於一個共享的位置,我不能修改它,並建立這個查詢我需要知道從他的id的內容類型的名稱。如何只有讀取權限的用戶知道內容類型的名稱他的網絡ID?在對象模型中,通過使用SpSecurity.RunWithelevated權限來解決問題...,我應該在Web服務中做些什麼?是否有可能獲得網絡內容類型? – Gaby 2010-04-22 08:13:38

+0

當涉及到Web服務時,SPSecurity.RunWithElevatedPrivileges沒有等價物,原因很多。如果有的話,任何人都可以編寫一個程序,以管理員身份在SharePoint服務器上執行代碼,而無需物理訪問服務器。這將是一個非常嚴重的安全漏洞。 – 2010-04-23 03:15:17

0

您可以編寫調用Web服務站點(甚至可以使用SharePoint對象模型)與所需的憑據的包裝Web服務。該包裝服務可以部署到SharePoint服務器。

您的自定義應用程序則可以調用包裝服務,而不需要提供正確的憑據。

+0

我需要使用web sercvices中構建的sharepoint來完成它。我可以在不編寫自定義Web服務的情況下獲取內容類型嗎? – Gaby 2010-04-21 05:45:55

+0

是的,看到其他答案 – 2010-04-22 02:15:11

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可需要你有ManageListsAddAndCustomizePages權限檢索所有內容類型。

所以,你一個解決辦法是,以確保客戶帳戶擁有這些權限,也許通過創建自定義權限級別,或者如果發佈站點內的工作,加入帳戶Designers組。