以匿名用户添加到Sharepoint列表
本文关键字:Sharepoint 列表 添加 用户 | 更新日期: 2023-09-27 18:14:59
现在,我正在使用SPSecurity。RunWithElevatedPrivileges方法,允许匿名用户将列表项添加到列表中。我想做的是做一个通用的方法,以网站,列表和列表项目为参数,并将项目添加到正在传递的列表中。现在我有:
public static void AddItemElevated(Guid siteID, SPListItem item, SPList list)
{
SPSite mySite = SPContext.Current.Site;
SPList myList = WPToolKit.GetSPList(mySite, listPath);
SPWeb myWeb = myList.ParentWeb;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite eleSite = new SPSite(mySite.ID))
{
using (SPWeb eleWeb = eleSite.OpenWeb(myWeb.ID))
{
eleWeb.AllowUnsafeUpdates = true;
SPList eleList = eleWeb.Lists[myList.Title];
SPListItem itemToAdd = list.Items.Add();
itemToAdd = item;
itemToAdd.Update();
eleWeb.AllowUnsafeUpdates = false;
}
}
});
}
问题是'item'在提升的权限之外初始化,所以当'itemToAdd'被设置为'item'时,它会失去其提升的权限,导致代码在'item.update()'处中断,如果我的非特权用户使用。
任何想法吗?
问题可能是因为您正在传递列表。试着输入列表名称,然后像这样从高架web中抓取列表:
public static void AddItemElevated(SPListItem itemToAdd, string listName)
{
SPWeb web = SPContext.Current.Web;
SPSecurity.RunWithElevatedPrivileges(delegate()
{
using (SPSite elevatedSite = new SPSite(web.Url))
{
using (SPWeb elevatedWeb = elevatedSite.OpenWeb())
{
elevatedWeb.AllowUnsafeUpdates = true;
SPList list = elevatedWeb.Lists[listName];
SPListItem item = list.Items.Add();
item = itemToAdd;
item.Update();
elevatedWeb.AllowUnsafeUpdates = false;
}
}
}
}
itemToAdd = item;
行之后做了一些奇怪的事情-您将项目添加到一个列表(使用list.Items.Add()
),但从另一个列表/位置(作为参数的一个)更新项目。
不确定你实际上想要什么,但也许你想复制所有的字段从item
到itemToAdd
。在这种情况下,考虑将fieldName/value对作为参数传递,以清楚地表明您正在添加具有给定值的新项。
请注意,匿名用户可以将项添加到显式允许的列表中。
我还没有试过,但这可能会有所帮助- http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.copyto.aspx
问候,Nitin Rastogi
如果item
来自splist . additem()方法,则splist实例必须从高架web获取。否则这段代码总是会被匿名用户破坏。
或者您可以允许匿名用户将项添加到列表中,这样您就不需要以提升的权限运行代码。
顺便说一下,itemToAdd = item;
不是将新添加的项设置到旧实例的正确方法。