sopy7 Ответов: 3

Определить права админа в C#


Я хочу проверить, есть ли у вошедшего в систему пользователя права администратора.
Я разрабатываю консольное приложение в ASP.NET 4.5.2, C#, Visual Studio 2015.

Я вхожу в систему как пользователь домена, имеющий права администратора.

Что я уже пробовал:

Попробовал несколько примеров кода, доступных в google, но ни один из них, похоже, не работает. Ниже приведены несколько образцов.

//Образец № 1

верните WindowsIdentity.GetCurrent().Владелец.IsWellKnown(WellknownSidType.BuiltinAdministratorsSid);

//Образец № 2
WindowsIdentity identity = WindowsIdentity.GetCurrent();
WindowsPrinciipal principal = новый WindowsPrincipal(identity);
возвращение принсиапла.IsInRole(WindowsBuiltInRole.Администратор);

Приведенный выше код возвращает true, только если Visual Studio 2015 запускается от имени администратора, иначе он всегда будет возвращать false.

Я хочу, чтобы приложение возвращало true, если вошедший в систему пользователь имеет права администратора, несмотря на то, что VS 2015 работает от имени администратора или нет..

F-ES Sitecore

Является ли клиент\пользователь сайта, которого вы хотите проверить, имеет права администратора?

phil.o

Консольное приложение в ASP.NET-что? Это звучит странно. Пожалуйста, опишите свой проект более подробно.

[no name]

Вам нужно выяснить, что вы делаете в первую очередь или пытаетесь сделать. "консольное приложение в ASP.NET 4.5.2, C#" говорит нам, что вы понятия не имеете, что вы делаете или пытаетесь сделать.

3 Ответов

Рейтинг:
2

Member 9361111

<DllImport("shell32.dll", SetLastError:=True)> _
Public Function IsUserAnAdmin() As <MarshalAs(UnmanagedType.Bool)> Boolean
End Function


Рейтинг:
0

Foothill

Это самое простое решение, которое я могу найти.

using System.DirectoryServices.AccountManagement; // in reference dll

public bool UserIsAdmin(string userSamAccountName, string adminSamAccountName)
{
 PrincipalContext context =  new PricipalContext(ContextType.Domain);
 GroupPrincipal adminGroup = new GroupPricipal(context, adminSamAccountName);
 UserPrincipal user = UserPrincipal.FindByIdentity(context, userSamAccountName);
 return user.IsMemberOf(adminGroup);
}


Правка: теперь будьте осторожны, вы не хотите, чтобы имя samAccount вашей группы администраторов домена просто лежало на сервере, если он обращен к интернету.