c# – 扩展UserPrincipal类
发布时间:2020-12-15 22:06:04 所属栏目:百科 来源:网络整理
导读:我做了UserPrincipal类的扩展,以检索我需要的一些缺少的属性: [DirectoryObjectClass("user")][DirectoryRdnPrefix("CN")]class UserPrincipalExt : UserPrincipal{ public UserPrincipalExt(PrincipalContext context) : base(context) { } [DirectoryProp
我做了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,identityType,identityValue); } 然后使用扩展类FindByIdentity方法进行搜索 var user = User.FindByIdentity( DomainContext,"name" ); 见这Link (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |