我正在尝试在InfoPath表单的代码隐藏中使用标准SharePoint Web服务GetWeb。表单作为工作流的一部分托管,因此使用Forms Services加载到浏览器中。因此,它运行在登录SharePoint的当前用户的凭据上。如果用户位于站点的“所有者”组中,则Web服务将运行,但如果用户位于“贡献者”或“读者”组中,则会提供“HTTP 401 Unauthorized”错误。我也在此之后使用GetLists Web服务,但只要用户具有Reader权限,它就会运行。
我只使用GetWeb调用来获取GetList调用所需的WebId作为参数。我通过将WebId传递给表单而不是让表单查找来解决我的权限问题。所以现在一切都好。
但是,我想知道为什么GetWeb需要更高的权限以及如何/可以控制这些权限。我没有找到任何关于不同开箱即用Web服务所需权限的文档,更不用说如何更改它们了。
[注意]我没有使用数据连接文件是出于某种原因,但无论如何都要建议它们。
答案 0 :(得分:2)
通过管理数据连接库中的Web服务详细信息,您无需对Web服务凭据进行硬编码。 UDCX文件包含用于存储Web服务凭据的模式,文件本身可以从Central Admin集中管理。
在中央管理员中使用数据连接文件: http://aidangarnish.net/blog/post/2008/11/Using-centrally-managed-SharePoint-data-connection-files-with-InfoPath-2007.aspx
(7)的Web服务凭证: http://sheetal-d.spaces.live.com/Blog/cns!237C3DEA7120098B!658.entry
答案 1 :(得分:0)
如果您正在为GetList使用sharepoint客户端。然后你可以看下面的代码。
ClientContext context = new ClientContext(siteURL);
UserInfo user = new UserInfo();
SecureString passWord = new SecureString();
foreach (char c in user.Pwd.ToCharArray()) passWord.AppendChar(c);
context.Credentials = new SharePointOnlineCredentials(user.UserName, passWord);
//context.Credentials = new System.Net.NetworkCredential(userName, password);
Web web = context.Web;
List list = web.Lists.GetByTitle(documentLibraryName);
CamlQuery query = new CamlQuery();
ListItemCollection items = list.GetItems(query);
context.Load(items);
context.ExecuteQuery();