2012-01-17 23 views
3

私のコードが自分のイベントレシーバーのSPListItems.RoleAssignmentsコレクションを通して反復しようとすると、エラーが発生します。ただし、投稿者の権利を持つユーザーのみ。管理者権限を持つユーザー。SharePoint 2010& "不正な操作を実行しようとしました。 &SPListItems.RoleAssignments

私は次のことを試してみた:

WindowsImpersonationContext ctx = null; 
ctx = WindowsIdentity.Impersonate(System.IntPtr.Zero); 
SPUserToken oSysToken = GetSysToken(properties.SiteId) 
private static SPUserToken GetSysToken(Guid SPSiteID) 
{ 
    SPUserToken sysToken = null; 
    using(SPSite oSite = new SPSite(SPSiteID)) 
    { 
     sysToken = oSite.SystemAccount.UserToken; 
    } 
    if (sysToken == null) 
    { 
     SPSecurity.RunWithElevatedPrivileges(
     delegate() 
     { 
      using(SPSite site = new SPSite(SPSiteID)) 
      { 
       sysToken = site.SystemAccount.UserToken; 
      } 
     }); 
    } 
    return sysToken; 
} 
  • 最後に、私はSPWeb.AllowUnsafeUpdates = true;

  • を試してみた:私の下SPRunElevatedPrivlagesは、次のコードを使用して
  • のWindows Impersationラッピング

    1. 私はすべての方法を一緒に、そして何もせずにseperatlyとcollectiveしてみました。 SPListItems.RoleAssignments.Countについても同様の例外があります。

  • 答えて

    3

    ユーザーは、少なくともが必要です。SPSecurableObject.RoleAssignmentsを読み取って変更するオブジェクトのアクセス許可を管理します。システムアカウントを使用してコードを実行するために

    は、あなたが「指定されたオブジェクトを再オープン」しなければならないのSharePointオブジェクトの権限を(上昇):

    SPListItem item = // the item from the event receiver 
    
    // Re-open the item with the system account 
    using (SPSite adminSite = new SPSite(item.Web.Url, SPUserToken.SystemAccount)) 
    { 
        using (SPWeb adminWeb = adminSite.OpenWeb()) 
        { 
        SPListItem adminItem = adminWeb 
         .Lists[item.ParentList.ID] 
         .GetItemByUniqueId(i.UniqueId); 
    
        // execute your code with the system account on the item. 
        // adminItem.RoleAssignments.WhatEver 
        } 
    } 
    

    SPUserToken.SystemAccountの使用を注意してください。これにより、SharePoint 2007で必要な「システムアカウントトークン」のハックが廃止されます。

    SharePointオブジェクトの操作については、SPSecurity.RunWithElevatedPrivilegesまたはWindowsIdentity.Impersonate(System.IntPtr.Zero)で、が必要です。

    私はこのトピックについてのブログ投稿を書いています:How To Open a SPSite With thw System Account In SharePoint 2010

    関連する問題