Соответствующий код: - Эта работа еще не завершена, и я все еще на стадии обнаружения, поэтому не все пути исключений завершены. Никаких ухищрений насчет повторных исключений - я доберусь до этого.
Я также должен сказать, что у меня минимальный опыт работы с AD. Это никогда не подходило мне раньше.
Большая часть кода взята из примеров Microsoft.
public static bool AddUser(string firstName, string lastName, string userLogonName,
string employeeID, string emailAddress, string telephone, string address,
string Password, DateTime expiry)
{
PrincipalContext principalContext = GetContext();
// Check if user object already exists in the store
if (UserExists(userLogonName))
{
throw new Exception(userLogonName + " already exists. Please use a different User Logon Name.");
}
// Create the new UserPrincipal object
UserPrincipal userPrincipal = new UserPrincipal(principalContext);
if (lastName != null && lastName.Length > 0)
{
userPrincipal.Surname = lastName;
}
if (firstName != null && firstName.Length > 0)
{
userPrincipal.GivenName = firstName;
}
if (employeeID != null && employeeID.Length > 0)
{
userPrincipal.EmployeeId = employeeID;
}
if (emailAddress != null && emailAddress.Length > 0)
{
userPrincipal.EmailAddress = emailAddress;
}
if (telephone != null && telephone.Length > 0)
{
userPrincipal.VoiceTelephoneNumber = telephone;
}
if (userLogonName != null && userLogonName.Length > 0)
{
userPrincipal.SamAccountName = userLogonName;
}
userPrincipal.AccountExpirationDate = expiry;
userPrincipal.SetPassword(Password);
userPrincipal.Enabled = true;
userPrincipal.PasswordNeverExpires = true;
try
{
userPrincipal.Save();
}
catch (Exception e)
{
throw new Exception("Exception saving user object. ", e);
}
return true;
}
И
public static void AddUserToGroup(string userLogonName, string groupName)
{
try
{
using (PrincipalContext principalContext = GetContext())
{
GroupPrincipal group = GroupPrincipal.FindByIdentity(principalContext, groupName);
group.Members.Add(FindUser(userLogonName));
group.Save();
}
}
catch (System.DirectoryServices.DirectoryServicesCOMException e)
{
throw e;
}
}
Когда я запускаю свой тест (добавить пользователя) и проверяю Active Directory, пользователь там. Все идет нормально.
Затем я запустил тест добавления в группу, и пользователь показывается как группа MemberOf в AD. Опять же, все как и ожидалось.
Теперь я перехожу на сайт Sharepoint и пытаюсь войти в систему как вновь созданный пользователь. Я получаю сообщение «Извините, этот сайт вам не предоставлен».
... Интерлюдия: много возни вокруг групп и прав доступа безрезультатно ...
Затем я вручную создал пользователя в AD, а затем запустил тест «Добавить в группу». В AD все выглядит хорошо, и я могу успешно войти на сайт Sharepoint.
Итак, я подозреваю, что что-то не так с методом AddUser, но я не могу понять, что. Я не вижу разницы между пользователем, созданным программно, и пользователем, созданным вручную.