Детект прав админа у пользователя
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.03.24 16:20
Оценка:
В продукте есть функционал по обновлению стороннего софта. Для большинства обновлений требуются права администратора. В этом случае пользователю выдается стандартный виндовый диалог ввода учетки и пароля.

Стоит задача понять, что пользователь имеет права локального админа (и стало быть способен произвести обновление софта).

Желательно сделать проверку без привлечения лишних (особенно сторонних) либ.

Как проще всего это сделать?

На входе есть имя учетки (включая домен или имя компа) и пароль.

Нашел вот такой пусть:
        bool valid = false;
        using (var context = new PrincipalContext(ContextType.Machine))
        {
            valid = context.ValidateCredentials(userName, password);

            var grp = GroupPrincipal.FindByIdentity(context, IdentityType.SamAccountName, "Administators");
            var user = UserPrincipal.FindByIdentity(context, userName);

            foreach (Principal p in user.GetAuthorizationGroups())
            {
                Debug.WriteLine(p);
                if (p.ToString() == "Administrators")
                {
                    // Administrator
                }
            }
        }


Но как-то перебором искать так себе идея. Плюс приходится использовать нюгет-пакет System.DirectoryServices.AccountManagement, что добавляет лишнего веса и хлопот.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Отредактировано 28.03.2024 16:36 VladD2 . Предыдущая версия .
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.