0

在Web部件中,没有任何权限的用户需要读取和更新Sharepoint列表。使用提升的权限更新Sharepoint列表

提升权限适用于阅读列表,但是当我尝试更新同一列表时,将引发异常。如何以更高的权限更新列表?

SPSecurity.RunWithElevatedPrivileges(delegate() 
{ 

SPSite oSite = SPControl.GetContextSite(HttpContext.Current); 
SPWeb oWeb = oSite.OpenWeb(); 
oWeb.AllowUnsafeUpdates = true; 
SPListItemCollection listItems = oWeb.Lists["nameList"].Items; 
SPListItem item = listItems.Add(); 

... 

item.Update(); // Throws Exception 
}); 
+0

异常发送一个“不能达到引起断章取义跟踪”的消息。 – 2011-05-18 12:20:31

+0

我建议使用在正确的代码中使用,你不应该放弃spsite和spweb对象。如果你没有直接从spcontext获得它,或者你的代码写在正确的代码上面 – 2011-05-19 05:49:20

+0

基本上是一个副本。看看这个答案:http://stackoverflow.com/questions/6043312/sharepoint-query-with-elevated-privileges – trgraglia 2011-05-18 13:32:30

回答

0

问题是SPSite的创建。

正确的代码:

SPSite oSite = new SPSite(SPContext.Current.Site.ID); 
SPWeb oWeb = oSite.OpenWeb(SPContext.Current.Web.ID);         
listItems = oWeb.Lists["nameList"]; 
1

升高的privilages用于添加编辑和删除所有操作,以便thier必须有一些其他的问题请提供异常的详细信息

+0

是的,是真的。这是由SPSite的创建造成的。 – 2011-05-18 12:21:01

+0

在这种情况下,您必须创建spsite和spweb的新实例,并且您不必从SPControl.GetContextSite(HttpContext.Current)中消费一个站点对象 – 2011-05-19 05:47:29