繁体   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