0

現在、SPSecurity.RunWithElevatedPrivileges メソッドを使用して、匿名ユーザーがリスト アイテムをリストに追加できるようにしています。私がやりたいことは、Site、List、および List アイテムを引数として受け取り、渡されるリストにアイテムを追加する一般的なメソッドを作成することです。今私は持っています:

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()' で壊れる原因となることです。特権ユーザー。

何かご意見は?

4

4 に答える 4

0

問題は、リストを渡していることが原因である可能性があります。リスト名を渡して、次のように昇格した 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;
            }
        }
    }
}
于 2011-11-16T23:43:24.357 に答える
0

次の行itemToAdd = item;は奇妙なことを行います.1つのリストにアイテムを追加しますが(を使用list.Items.Add())、別のリスト/場所からアイテムを更新します(引数として来るもの)。

item実際に何が必要かはわかりませんが、すべてのファイルを からにコピーしたいかもしれませんitemToAdd。この場合、フィールド名/値のペアを引数として渡して、指定された値で新しいアイテムを追加していることを明確にすることを検討してください。

匿名ユーザーは、明示的に許可されているリストにアイテムを追加できることに注意してください。

于 2011-11-16T23:43:52.953 に答える
0

itemSPList.AddItem() メソッドからのものである場合、splist インスタンスは昇格された Web から取得する必要があります。そうしないと、このコードは匿名ユーザーに対して常に壊れます。

または、匿名ユーザーがアイテムをリストに追加できるようにすることで、昇格された特権でコードを実行する必要がなくなります。

ちなみに、itemToAdd = item;新しく追加されたアイテムを古いインスタンスに設定する正しい方法ではありません。

于 2011-11-17T13:18:16.797 に答える
0

私は試していませんが、おそらくこれが役立つかもしれません - http://msdn.microsoft.com/en-us/library/microsoft.sharepoint.splistitem.copyto.aspx

よろしく、 ニティン・ラストギ

于 2011-11-17T08:37:37.153 に答える