2008-09-24 5 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