[英]how to check if current user is in admin group c#
我已經閱讀了相關的 Stack Overflow 問題並嘗試了以下代碼:
WindowsIdentity identity = WindowsIdentity.GetCurrent();
if (null != identity)
{
WindowsPrincipal principal = new WindowsPrincipal(identity);
return principal.IsInRole(WindowsBuiltInRole.Administrator);
}
return false;
即使我手動確認當前用戶是本地內置管理員組的成員,它也不會返回 true。
我錯過了什么?
謝謝。
剛剛找到其他方法來檢查用戶是否是管理員,而不是以管理員身份運行應用程序:
private static bool IsAdmin()
{
WindowsIdentity identity = WindowsIdentity.GetCurrent();
if (identity != null)
{
WindowsPrincipal principal = new WindowsPrincipal(identity);
List<Claim> list = new List<Claim>(principal.UserClaims);
Claim c = list.Find(p => p.Value.Contains("S-1-5-32-544"));
if (c != null)
return true;
}
return false;
}
歸功於此答案,但代碼已更正。
您上面的代碼似乎僅在以管理員身份運行時才有效,但是您可以通過執行以下代碼來查詢用戶是否屬於本地管理員組(不以管理員身份運行)。 但是請注意,組名是硬編碼的,所以我想如果您想在不同語言的操作系統上運行它,您需要做一些本地化工作。
using (var pc = new PrincipalContext(ContextType.Domain, Environment.UserDomainName))
{
using (var up = UserPrincipal.FindByIdentity(pc, WindowsIdentity.GetCurrent().Name))
{
return up.GetAuthorizationGroups().Any(group => group.Name == "Administrators");
}
}
請注意,您還可以通過在第二個using
塊中執行此操作來獲取用戶所屬的所有組的列表:
var allGroups = up.GetAuthorizationGroups();
但這會慢得多,具體取決於他們所屬的組的數量。 例如,我在 638 個組中,運行它需要 15 秒。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.