Я пишу следующие методы, чтобы добавить и удалить пользователей из активного каталога в C#.
void AddUserToGroup(string userId, string groupName);
void RemoveUserFromGroup(string userId, string groupName);
Как лучше всего реализовать эти методы?
Вот некоторый код от CodeProject. Я не вижу, где AD сервер определяется в этих примерах хотя? (разве это неявно предоставляется платформой.NET при использовании протокола LDAP?). Действительно ли эти примеры стоят следующего?
public void AddToGroup(string userDn, string groupDn)
{
try
{
DirectoryEntry dirEntry = new DirectoryEntry("LDAP://" + groupDn);
dirEntry.Properties["member"].Add(userDn);
dirEntry.CommitChanges();
dirEntry.Close();
}
catch (System.DirectoryServices.DirectoryServicesCOMException E)
{
//doSomething with E.Message.ToString();
}
}
public void RemoveUserFromGroup(string userDn, string groupDn)
{
try
{
DirectoryEntry dirEntry = new DirectoryEntry("LDAP://" + groupDn);
dirEntry.Properties["member"].Remove(userDn);
dirEntry.CommitChanges();
dirEntry.Close();
}
catch (System.DirectoryServices.DirectoryServicesCOMException E)
{
//doSomething with E.Message.ToString();
}
}
Фу... LDAP. Если вы используете .Net Framework 3.5 или выше, я настоятельно рекомендую использовать пространство имен System.DirectoryServices.AccountManagement. Это делает вещи так что намного проще.
public void AddUserToGroup(string userId, string groupName)
{
try
{
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "COMPANY"))
{
GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, groupName);
group.Members.Add(pc, IdentityType.UserPrincipalName, userId);
group.Save();
}
}
catch (System.DirectoryServices.DirectoryServicesCOMException E)
{
//doSomething with E.Message.ToString();
}
}
public void RemoveUserFromGroup(string userId, string groupName)
{
try
{
using (PrincipalContext pc = new PrincipalContext(ContextType.Domain, "COMPANY"))
{
GroupPrincipal group = GroupPrincipal.FindByIdentity(pc, groupName);
group.Members.Remove(pc, IdentityType.UserPrincipalName, userId);
group.Save();
}
}
catch (System.DirectoryServices.DirectoryServicesCOMException E)
{
//doSomething with E.Message.ToString();
}
}
Сервер является частью переменного значения . Например:
LDAP: //myserver/cn=mygroup ,cn=groups,n=mycontainer'dn=mydomain.com
Все это - путь LDAP для группы. Первая часть (MyServer) - это имя сервера.
Часть после имени сервера (например, Cn = ...) - DN (отличное имя) группы.
Вы можете поставить сервер LDAP в аргументе пути к каталогам Patorententry, поэтому «LDAP: //» + LDAPSERVER + LDAPQUERY.
Используйте каталога (строковый путь, строка usid, строковый пароль), если вам нужно аутентифицировать