using System;
namespace ZeroLevel.Services.Impersonation
{
///
/// Класс исполняющий произвольный код с правами указанного пользователя
///
public class UserImpersonationExecutor
: IImpersonationExecutor
{
private string USR { get; set; }
private string DOMAIN { get; set; }
private string PWD { get; set; }
private ImpersonationNativeMethods.LogonType logonType = ImpersonationNativeMethods.LogonType.LOGON32_LOGON_INTERACTIVE;
public UserImpersonationExecutor(string userName, string domainName, string password)
{
USR = userName;
DOMAIN = domainName;
PWD = password;
}
///
/// Исполнение кода
///
/// Тип передаваемого аргумента
/// Делегат
/// Аргумент
public void ExecuteCode(Action action, T arg)
{
using (Impersonation imp = new Impersonation())
{
imp.ImpersonateByUser(USR, DOMAIN, PWD, logonType);
action(arg);
}
}
///
/// Исполнение кода
///
/// Тип передаваемого аргумента
/// Делегат
public void ExecuteCode(Action action)
{
using (Impersonation imp = new Impersonation())
{
imp.ImpersonateByUser(USR, DOMAIN, PWD, logonType);
action();
}
}
}
}