С теоретической точки зрения я думаю, что то, что вы хотите сделать, не имеет смысла.Это объясняется в статье, которую вы указываете, но это не так ясно.Концепция Principal
основана на Directory Schema
, которые описывают объекты, которые вы можете добавить в ActiveDirectory.
Классы Principal, AuthenticablePrincipal, UserPrincipal, ComputerPrincipal и GroupPrincipal можно расширить для создания пользовательскихобъекты, расширяющие объектную модель .
Но в LDAP в целом, как и в Active-Directory, класс organizationalUnit
не является подклассом класса user
, а просто подклассом класса top
.
Другими словами: с концептуальной точки зрения вы можете заметить, что Principal
является своего рода пользователем (Да, с точки зрения Microsoft, компьютеры являются пользователями, они открывают сессии в домене, как пользователи), иorganizationalUnit
является своего рода организационным блоком (как каталог в файловой системе), поэтому второй не расширяет первый.
Отредактировано
Вот подклассDirectoryEntry, которые делают то, что вы хотите:
class ClsOrganizationalUnit : DirectoryEntry
{
private DirectoryEntry de;
public string Description
{
get { return (string)de.Properties["description"][0]; }
set { de.Properties["description"].Value = value;
de.CommitChanges();
}
}
public ClsOrganizationalUnit(string dn, string username, string password)
{
de = new DirectoryEntry(dn, username, password);
}
}
class Program
{
static void Main(string[] args)
{
ClsOrganizationalUnit ou = new ClsOrganizationalUnit("LDAP://192.168.183.100:389/ou=Monou,dc=dom,dc=fr", "jpb", "pwd");
/* Set the attribute */
ou.Description = "The description you want";
Console.WriteLine("Here is your OU description : {0}", ou.Description);
/* Remove the attribute */
ou.Description = null;
}
}