以匿名用户添加到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()'处中断,如果我的非特权用户使用。

任何想法吗?

以匿名用户添加到Sharepoint列表

问题可能是因为您正在传递列表。试着输入列表名称,然后像这样从高架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()),但从另一个列表/位置(作为参数的一个)更新项目。

不确定你实际上想要什么,但也许你想复制所有的字段从itemitemToAdd。在这种情况下,考虑将fieldName/value对作为参数传递,以清楚地表明您正在添加具有给定值的新项。

请注意,匿名用户可以将项添加到显式允许的列表中。

我还没有试过,但这可能会有所帮助- http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.copyto.aspx

问候,Nitin Rastogi

如果item来自splist . additem()方法,则splist实例必须从高架web获取。否则这段代码总是会被匿名用户破坏。

或者您可以允许匿名用户将项添加到列表中,这样您就不需要以提升的权限运行代码。

顺便说一下,itemToAdd = item;不是将新添加的项设置到旧实例的正确方法。