簡體   English   中英

c# - 如何檢查當前用戶是否在管理員組中

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM