2010-04-29 49 views
0
  1. 我有一個命名的網站集,其中FBA位於我使用ActiveDirectoryMembershipProvider。
  2. 我們有一個服務器場管理員域\管理員。他不是明確的sitecollection管理員。

我創建了一個我在域\管理員帳戶下運行的示例控制檯應用程序。 中的代碼是類似的東西:控制檯中的RunWithElevatedPrivileges在FBA中的奇怪行爲

    using (SPSite site = new SPSite(serverUrl)) 
        { 
         using (SPWeb web = site.OpenWeb()) 
         { 
          Console.WriteLine(web.CurrentUser.LoginName); 
          Console.WriteLine(WindowsIdentity.GetCurrent().Name); 
          string userName = "domain\\testuser"; 
          SPUser spUser = web.EnsureUser(userName); 
          SPGroup group = web.SiteGroups["GroupName"]; 
          group.AddUser(spUser); 
          group.Update(); 
         } 
        } 

控制檯輸出域\管理員,但是我成爲一個存取遭拒例外,當我嘗試將用戶添加到組。 但是,當我運行這與RunWithElevetadPrivileges(根據我讀的所有帖子應該沒有影響控制檯應用程序),並設置AllowUnsafeUpdates = true(同一故事)的代碼順利通過,沒有例外拋出,用戶被添加到組。有趣的是,寫入控制檯輸出的用戶仍然是域\管理員。

所以我的問題是:WTF?有沒有更好的辦法?爲什麼這會發生?有沒有人有這個問題?我應該使用另一個membershipprovider嗎?

小提示:當FBA關閉時,我不會成爲例外。

回答

0

RunWithElevatedPrivileges以應用程序池運行的用戶權限運行代碼。它可以不是管理員。你確定你得到與RunWithElevatedPrivileges相同的結果嗎?

無論如何,更好的是,more reliable way of elevating privileges是在SPSite構造函數中傳遞系統用戶用戶令牌。嘗試一下。

+0

感謝您的提示。它確實使代碼更清晰。我已經加倍檢查了測試應用程序,並且它始終以當前用戶的身份返回域\管理員。我期望當前用戶將是apppool用戶,然後它將工作,或者它仍然是域\管理員,在這種情況下runwithprivileges和標準調用應該沒有區別。 – 2010-04-30 08:29:00