2008-09-24 34 views
17

我有一個應用程序在整個過程中都使用了模擬。但是當用戶以管理員身份登錄時,一些操作需要他們自己寫入服務器。現在,如果這些用戶在實際的服務器上沒有權限(有些不這樣做),它不會讓他們寫入。我是否可以在幾次關閉的情況下關閉模擬

我想要做的就是關閉模擬只是幾個命令。

有沒有辦法做這樣的事情?

using(HostingEnvironment.Impersonate.Off()) 
    //I know this isn't a command, but you get the idea? 

謝謝。

回答

20

確保應用程序池確實有你需要的正當權益。

然後,當你想要恢復到應用程序池標識...運行以下命令:

private WindowsImpersonationContext context = null; 
public void RevertToAppPool() 
{ 
    try 
    { 
     if (!WindowsIdentity.GetCurrent().IsSystem) 
     { 
      context = WindowsIdentity.Impersonate(System.IntPtr.Zero); 
     } 
    } 
    catch { } 
} 
public void UndoImpersonation() 
{ 
    try 
    { 
     if (context != null) 
     { 
      context.Undo(); 
     } 
    } 
    catch { } 
} 
2

我不確定這是否是首選方法,但是當我想要這樣做時,我新增了一個WindowsIdentity的實例並稱爲Impersonate方法。這允許後續代碼模擬不同的Windows用戶。它返回一個WindowsImpersonationContext,它有一個Undo方法,可以將模擬上下文重新恢復回去。

+0

有沒有你知道的,我可以調用默認web_app賬戶,而不會有任何指定它什麼辦法? – naspinski 2008-09-24 03:24:25

0

您可以關閉該頁面的身份驗證,然後在代碼的其餘部分手動模擬經過身份驗證的用戶。

http://support.microsoft.com/kb/306158

這有可能是最後一個參考,但基本上你冒充User.Identity

這將意味着你將不得不在頁面的任何呼叫開始模仿,把它關掉當你需要它的時候,當你完成後再打開它,但它應該是一個可行的解決方案。

0

我剛剛結束了給文件夾的寫權限「驗證用戶」

+0

也可以。但是它留下了一些巨大的安全風險。因爲即使匿名用戶也可以寫入該文件夾。我強烈建議您讓自己成爲一個恢復到應用程序池標識的類。然後使用該實例在還原下。 – 2008-10-20 03:19:17

相關問題