2017-09-21 4 views
0

以下のコードで、特定のユーザーがグループに所属しているかどうかを確認しています。私は取得していますSPSecurity.RunWithElevatedPrivilegesでの不正な例外?

不正例外 (0x80070005と)

と私は理由を理解していませんか?私はSPSecurity.RunWithElevatedPrivilegesを使用しています、なぜそれが私にこの例外を与えているのですか?誰か私のヒント?前もって感謝します!

public bool IsUserInGroup(SPWeb web, string groupName, string user) 
{ 
    try 
    { 
     bool returnValue = false; 
     SPSecurity.RunWithElevatedPrivileges(() => 
     { 
      if (web.Groups.OfType<SPGroup>().Where(g => g.Name == groupName).Count() > 0) 
      { 
       SPGroup spGroup = web.Groups[groupName]; 
       if (spGroup.Users.OfType<SPUser>().Where(u => u.LoginName.Equals(user)).Count() > 0) 
       { 
        returnValue = true; 
       } 
       else 
       { 
        returnValue = false; 
       } 
      } 
      else 
      { 
       returnValue = false; 
      } 
     }); 
     return returnValue; 
    } 
    catch (Exception exp) 
    { 
     Classes.Logs.Error.Log_Error("IsUserInGroup", "DocumentCenterItem.cs", exp.Message, DateTime.Now); 
     return false; 
    } 
} 

答えて

1

あなたは、昇格した権限内SP Webの新しいインスタンスを作成する必要があります。現在の実装では、現在のユーザーコンテキストで実行されているwebオブジェクトを再利用しています。

ので、試してみて、あなたの要件ごとに以下のコードを変更します。

public bool IsUserInGroup(SPWeb web, string groupName, string user) 
{ 
    try 
    { 
     bool returnValue = false; 
     SPSecurity.RunWithElevatedPrivileges(() => 
     {  
      using(SPSite site = new SPSite(web.Site.ID)) 
      { 
       using(SPWeb elevatedWeb = site.OpenWeb(web.ID)) 
       { 
        if (elevatedWeb.Groups.OfType<SPGroup>().Where(g => g.Name == groupName).Count() > 0) 
        { 
         SPGroup spGroup = elevatedWeb.Groups[groupName]; 
         if (spGroup.Users.OfType<SPUser>().Where(u => u.LoginName.Equals(user)).Count() > 0) 
         { 
          returnValue = true; 
         } 
         else 
         { 
          returnValue = false; 
         } 
        } 
        else 
        { 
         returnValue = false; 
        }    
       }    
      } 
     }); 
     return returnValue; 
    } 
    catch (Exception exp) 
    { 
     Classes.Logs.Error.Log_Error("IsUserInGroup", "DocumentCenterItem.cs", exp.Message, DateTime.Now); 
     return false; 
    } 
} 
+1

感謝をあなたの答えのために。ちょっとした小説です。あなたは '(SPWeb elevatedWeb ...)'を使わないでください。ウェブをそこに配置しないでください。代わりに 'SPWeb elevatedWeb = spSite.RootWeb'を使用してください。 https://gallery.technet.microsoft.com/office/SharePoint-Dispose-Checker-01da48e8からSPDisposerCheckツールをお勧めします –

関連する問題