首页 > 解决方案 > sid 字符串是众所周知的 sid

问题描述

有没有一种快速的方法(无需将所有众所周知的 sid 复制到代码中)来确定 sid 字符串是否是众所周知的字符串?

bool IsWellKnownSid(string sid)

标签: c#active-directory

解决方案


您可以使用WellKnownSidType枚举,就像 Austin 提到的那样,但您仍然必须遍历每个值以检查它是否匹配。

这是一种可以做到这一点的方法:

private static WellKnownSidType[] _wellKnownSids = (WellKnownSidType[])Enum.GetValues(typeof(WellKnownSidType));

public bool IsWellKnownSid(SecurityIdentifier sid) {
    foreach (var wellKnown in _wellKnownSids) {
        if (sid.IsWellKnown(wellKnown)) return true;
    }
    return false;
}

_wellKnownSids字段是为了防止您在Enum.GetValues每次调用该方法时调用该方法,而值将始终相同。

如果您愿意,可以将其更改为扩展方法:

public static bool IsWellKnownSid(this SecurityIdentifier sid)

推荐阅读