Сообщение Детект прав админа у пользователя от 28.03.2024 16:20
Изменено 28.03.2024 16:36 VladD2
Детект прав админа у пользователя
В продукте есть функционал по обновлению стороннего софта. Для большинства обновлений требуются права администратора. В этом случае пользователю выдается стандартный виндовый диалог ввода учетки и пароля.
Стоит задача понять, что пользователь имеет права локального админа (и стало быть способен произвести обновление софта).
Желательно сделать проверку без привлечения лишних (особенно сторонних) либ.
Как проще всего это сделать?
На входе есть имя учетки (включая домен или имя компа) и пароль.
Стоит задача понять, что пользователь имеет права локального админа (и стало быть способен произвести обновление софта).
Желательно сделать проверку без привлечения лишних (особенно сторонних) либ.
Как проще всего это сделать?
На входе есть имя учетки (включая домен или имя компа) и пароль.
Детект прав админа у пользователя
В продукте есть функционал по обновлению стороннего софта. Для большинства обновлений требуются права администратора. В этом случае пользователю выдается стандартный виндовый диалог ввода учетки и пароля.
Стоит задача понять, что пользователь имеет права локального админа (и стало быть способен произвести обновление софта).
Желательно сделать проверку без привлечения лишних (особенно сторонних) либ.
Как проще всего это сделать?
На входе есть имя учетки (включая домен или имя компа) и пароль.
Нашел вот такой пусть:
Но как-то перебором искать так себе идея. Плюс приходится использовать нюгет-пакет System.DirectoryServices.AccountManagement, что добавляет лишнего веса и хлопот.
Стоит задача понять, что пользователь имеет права локального админа (и стало быть способен произвести обновление софта).
Желательно сделать проверку без привлечения лишних (особенно сторонних) либ.
Как проще всего это сделать?
На входе есть имя учетки (включая домен или имя компа) и пароль.
Нашел вот такой пусть:
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, что добавляет лишнего веса и хлопот.