2013-03-01 2 views
1

Я веб-приложение, которое использует атрибут Authorize с ролями, указанного для ограничения доступа к некоторым страницам:Как получить идентификатор активной группы каталогов для авторизованных пользователей

[Authorize(Roles = "AD_group1, AD_group2")] 

Вопрос - есть ли способ, я могу получить какой-то Active Directory groupId для авторизованного пользователя (неважно, int или string)?

upd: Основная идея состоит в том, чтобы хранить некоторую таблицу в базе данных, содержащую шаблоны, которые должны быть отдельными для каждой группы. например пользователи group1 могут иметь некоторые шаблоны для быстрого ответа на типичные вопросы, а group2 не имеют какой-либо из них, или иметь некоторые другие шаблоны

ответ

3

Если вы на .NET 3.5 и выше, вы должны проверить System.DirectoryServices.AccountManagement (S.DS.AM). Читайте об этом здесь:

В принципе, вы можете определить контекст домена и легко найти пользователей и/или групп в AD:

// set up domain context 
using (PrincipalContext ctx = new PrincipalContext(ContextType.Domain)) 
{ 
    // find a user 
    UserPrincipal user = UserPrincipal.FindByIdentity(ctx, "SomeUserName"); 
    // or if you want the currently logged in user - you can also use: 
    // UserPrincipal user = UserPrincipal.Current; 

    if(user != null) 
    { 
     // get all groups the user is a member of 
     foreach(GroupPrincipal group in user.GetAuthorizationGroups()) 
     { 
      string distinguishedName = group.DistinguishedName; 
      Guid groupGuid = group.Guid; 
     } 
    } 
} 

новый S.DS.AM позволяет очень легко играть с пользователями и группами в AD!

+0

Спасибо! Это то, что мне нужно – Sergio

+0

У меня есть ошибка при выпуске System.InvalidCastException: невозможно лить объект типа «System.DirectoryServices.AccountManagement.GroupPrincipal» для ввода «System.DirectoryServices.AccountManagement.UserPrincipal»? Знаете, что делать? –