gpt4 book ai didi

c# - 扩展 UserPrincipal 类

转载 作者:行者123 更新时间:2023-11-30 12:45:24 25 4
gpt4 key购买 nike

我扩展了 UserPrincipal 类以检索我需要的一些缺失的属性:

[DirectoryObjectClass("user")]
[DirectoryRdnPrefix("CN")]
class UserPrincipalExt : UserPrincipal
{
public UserPrincipalExt(PrincipalContext context)
: base(context)
{
}

[DirectoryProperty("department")]
public string Department
{
get
{
if (ExtensionGet("department").Length != 1)
return null;
return (string)ExtensionGet("department")[0];
}
set
{
this.ExtensionSet("department", value);
}
}

[DirectoryProperty("company")]
public string Company
{
get
{
if (ExtensionGet("company").Length != 1)
return null;
return (string)ExtensionGet("company")[0];
}
set
{
this.ExtensionSet("company", value);
}
}

[DirectoryProperty("c")]
public string CountryAbbreviation
{
get
{
if (ExtensionGet("c").Length != 1)
return null;
return (string)ExtensionGet("c")[0];
}
set
{
this.ExtensionSet("c", value);
}
}
}

然后,我可以像这样轻松搜索:

 PrincipalContext principalContext = new PrincipalContext(ContextType.Domain, myDomain);
UserPrincipalExt userExt = new UserPrincipalExt(principalContext);
PrincipalSearcher searcher = new PrincipalSearcher(userExt);

userExt.GivenName = "blabla";
userExt.EmailAddress ="text here";

PrincipalSearchResult<Principal> searchTmp = null;

searcher.QueryFilter = userExt;
searchTmp = searcher.FindAll();

因此,我的新任务和我当前的问题是:对于在 ActiveDirectory 中搜索到的组,有必要使用扩展类获取用户列表。

GroupPrincipal group = (GroupPrincipal)collection.FirstOrDefault();

foreach (Principal pRes in group.GetMembers())
{
//This doesnt work of course.
// return null value.
UserPrincipalExt user = pRes as UserPrincipalExt;
}

我怎样才能实现目标?

作为解决方法,我已经创建了一个函数来检索属性:

private string GetExtendedProperty(Principal principal, string propertyTo)
{
string property = "";

try
{
DirectoryEntry directoryEntry = principal.GetUnderlyingObject() as DirectoryEntry;

if (directoryEntry.Properties.Contains(propertyTo))
{
property = directoryEntry.Properties[propertyTo].Value.ToString();
}
else
{
property = "";
}
}
catch (Exception ex)
{
Logger.ScriviLog(4, this.GetType().Name, MethodBase.GetCurrentMethod().Name, ex.Message);
}

return property;
}

提前谢谢你。

最佳答案

覆盖扩展类中的 FindByIdentity 方法。

public new static User FindByIdentity(PrincipalContext context, string identityValue)
{
return (User)FindByIdentityWithType(context, typeof(User), identityValue);
}

public new static User FindByIdentity(PrincipalContext context, IdentityType identityType, string identityValue)
{
return (User)FindByIdentityWithType(context, typeof(User), identityType, identityValue);
}

然后使用扩展类的FindByIdentity方法进行搜索

var user = User.FindByIdentity(
DomainContext,
"name"
);

查看此 Link

关于c# - 扩展 UserPrincipal 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24798037/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com