Отслеживание изменений пользователя в активном каталоге - PullRequest
1 голос
/ 04 апреля 2011

Я пишу приложение, которое должно знать, изменилось ли что-либо в объекте активного каталога пользователя (например, членство в группе) с момента последнего запуска приложения.

Я смотрел на атрибут whenChangedно это только изменится, если пользователь изменит свой пароль.Мне просто нужно что-то, что я могу сохранить в своем конфигурационном файле, и проверить это значение в активном каталоге при следующем запуске приложения.

Кто-нибудь знает что-нибудь, что я могу надежно использовать?

Cheers Luke

Ответы [ 2 ]

1 голос
/ 04 апреля 2011

Учитывая, что вы в основном связаны с группами, я думаю, вам придется создать хеш - изменение членства в группах не повлияет на объект пользователя.

Вот быстрый пример, который я сбил.

public static string HashGroups(string user)
{
    DirectoryEntry directoryEntry = default(DirectoryEntry);
    DirectorySearcher dirSearcher = default(DirectorySearcher);

    List<string> result = new List<string>();

    directoryEntry = new DirectoryEntry("LDAP://<YOUR_DOMAIN>");
    directoryEntry.RefreshCache();

    // Get search object, specify filter and scope, 
    // perform search. 
    dirSearcher = new DirectorySearcher(directoryEntry);
    dirSearcher.PropertiesToLoad.Add("memberOf");
    dirSearcher.Filter = "(&(sAMAccountName=" + user + "))";

    SearchResult sr = dirSearcher.FindOne();

    // Enumerate groups 
    foreach (string group in sr.Properties["memberOf"])
    {
        result.Add(group);
    }

    // OrderBy is important! Otherwise, your hash might fail because 
    // the groups come back in different order.
    MD5 md5 = MD5.Create();
    Byte[] inputBytes = Encoding.ASCII.GetBytes(result.OrderBy(s1 => s1).SelectMany(s2 => s2).ToArray());
    byte[] hash = md5.ComputeHash(inputBytes);

    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < hash.Length; i++)
    {
        sb.Append(hash[i].ToString("X2"));
    }
    return sb.ToString();
}

ПРЕДЫДУЩАЯ (мусор) ОТВЕТ Согласно документам, атрибут Modify-Time-Stamp имеет вид «Вычисляемый атрибут, представляющий дату последнего изменения этого объекта». звучит как то, что вы хотите. Он доступен во всех версиях, начиная с 2000 года.

РЕДАКТИРОВАТЬ Похоже, что это вычислено из whenChanged, так что если это не работает для вас, то это может не сработать.

1 голос
/ 04 апреля 2011

Вы всегда можете проверить свойства Справочника на время последней записи или изменения и, возможно, сохранить некоторые XML или некоторые данные, которые отслеживают время последней записи файлов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...