У меня есть расширение GroupPrincipal, который добавляет несколько extensionAttributes:Как отлит из GroupPrincipal базы для GroupPrincipalsEx
[DirectoryObjectClass("group")]
[DirectoryRdnPrefix("CN")]
public class GroupPrincipalsEx : GroupPrincipal
{
public GroupPrincipalsEx(PrincipalContext context) : base(context) { }
public GroupPrincipalsEx(PrincipalContext context, string samAccountName)
: base(context, samAccountName)
{
}
[DirectoryProperty("ExtensionAttribute1")]
public string ExtensionAttribute1
{
get
{
if (ExtensionGet("ExtensionAttribute1").Length != 1)
return null;
return (string)ExtensionGet("ExtensionAttribute1")[0];
}
set { this.ExtensionSet("ExtensionAttribute1", value); }
}
[DirectoryProperty("ExtensionAttribute2")]
public string ExtensionAttribute2
{
get
{
if (ExtensionGet("ExtensionAttribute2").Length != 1)
return null;
return (string)ExtensionGet("ExtensionAttribute2")[0];
}
set { this.ExtensionSet("ExtensionAttribute2", value); }
}
[DirectoryProperty("ExtensionAttribute3")]
public string ExtensionAttribute3
{
get
{
if (ExtensionGet("ExtensionAttribute3").Length != 1)
return null;
return (string)ExtensionGet("ExtensionAttribute3")[0];
}
set { this.ExtensionSet("ExtensionAttribute3", value); }
}
[DirectoryProperty("ExtensionAttribute4")]
public string ExtensionAttribute14
{
get
{
if (ExtensionGet("ExtensionAttribute4").Length != 1)
return null;
return (string)ExtensionGet("ExtensionAttribute4")[0];
}
set { this.ExtensionSet("ExtensionAttribute4", value); }
}
}
Мне нужно, чтобы получить список групп, которые конкретный пользователь является членом и extensionAttribute1 этой группы является конкретным значением. Он должен возвращать массив пользовательских объектов (группа SamAccountName, DN, extensionAttributes 1-4).
Я знаю, как получить доступ к всем группам пользователей, но у меня возникла проблема с литой GroupPrincipal для GroupPrincipalsEx.
public List<GroupPrincipalsEx> GetGroups(string userName, Boolean Recurent = false)
{
List<GroupPrincipalsEx> result = new List<GroupPrincipalsEx>();
// establish domain context
PrincipalContext yourDomain = new PrincipalContext(ContextType.Domain);
// find your user
UserPrincipal user = UserPrincipal.FindByIdentity(yourDomain, userName);
// if found - grab its groups
if (user != null)
{
PrincipalSearchResult<Principal> groups = Recurent ? user.GetAuthorizationGroups() : user.GetGroups();
// iterate over all groups
foreach (Principal p in groups)
{
// make sure to add only group principals
if (p is GroupPrincipal)
{
//I need a way to cast p from GroupPrincipal to GroupPrincipalsEx and then add it to array
GroupPrincipalsEx gp = (GroupPrincipalsEx)p;
if(gp.ExtensionAttribute1 == "Specific Value")
result.Add(gp);
}
}
}
return result;
}
Любая идея, как это сделать без использования DirectoryEntry?
зм получает всегда нуль – Vojin
Хмм я понимаю. Взгляните на http://stackoverflow.com/questions/2668818/extending-groupprincipal-and-members-property Кто-то задал аналогичный вопрос – Sarrus