В веб-приложении, над которым я работаю, используются идентификаторы пользователей и групп из Active Directory.То есть пользователи могут наследовать доступ к некоторым частям приложения (в частности, к отчетам) в зависимости от их членства в группах AD.
Итак, мы используем GUID пользователя и GUID группы в качестве ключа для отслеживания базы данных.доступ к функциям.
Приложение отлично работает в среде разработки (IIS7 работает на Windows 7).Но когда я пытаюсь настроить сайт в моей тестовой среде (IIS7, работающей на Windows Server 2008 R2), я получаю следующую ошибку:
Невозможно привести объект типа 'System.DirectoryServices.AccountManagement.GroupPrincipal'набрать 'System.DirectoryServices.AccountManagement.UserPrincipal'.
Из трассировки стека выясняется, что виновный код:
public string UserGUID
{
get
{
return UserPrincipal.Current.Guid.ToString();
}
}
Я также обращаюсь к GroupPrincipals в методе, которыйвыбирает все группы, к которым принадлежит конкретный пользователь:
public ArrayList Get_UserGroupGUIDs(string username)
{
ArrayList oList = new ArrayList();
// "company" is the domain we would like to search in
using ( PrincipalContext ctx = new PrincipalContext ( ContextType.Domain, "isidc.com" ) )
{
// get the user of that domain by his username, within the context
using ( UserPrincipal up = UserPrincipal.FindByIdentity(ctx, IdentityType.SamAccountName, username))
{
if (up != null)
{
// fetch the group list
using (PrincipalSearchResult<Principal> Groups = up.GetAuthorizationGroups())
{
foreach (GroupPrincipal g in Groups)
{
oList.Add(g.Guid.ToString());
} // end foreach
} // end using
} // end if
} // end using
return oList;
} // end method Get_UserGroupGUIDs
Есть идеи?