Информация о текущем пользователе домена

Дата публикации: 31.01.2011
Дата редактирования: не редактировалась
Состояние: завершена

    Написал статический класс, имена методов которого говорят сами за себя. Класс предназначен для того, чтобы собрать в одном месте набор некоторой информации, которая вероятнее всего потребуется при написании кода, ориентированного на групповую работу пользователей в рамках доменной группы.

Подключенные библиотеки:



Исходный код (C# 3.0):

   1:  using System;
   2:  using System.Collections.Generic;
   3:  using System.Linq;
   4:  using System.Text;
   5:  using System.Xml.Linq;
   6:  using System.DirectoryServices.AccountManagement;
   7:  using System.DirectoryServices.ActiveDirectory;
   8:  using System.Runtime.InteropServices;
   9:   
  10:  namespace Bushman.DirectoryServices {
  11:      /// <summary>
  12:      /// Статический класс, предоставляющий некоторую информацию о текущем пользователе домена
  13:      /// </summary>
  14:      public static class CurrentDomainUser {
  15:   
  16:          /// <summary>
  17:          /// Имя текущего доменного пользователя
  18:          /// </summary>
  19:          public static string GetCurrentUserName() {
  20:              return UserPrincipal.Current.Name;
  21:          }
  22:   
  23:          /// <summary>
  24:          /// Отчество текущего доменного пользователя
  25:          /// </summary>
  26:          public static string GetCurrentUserMiddleName() { return UserPrincipal.Current.MiddleName; }
  27:   
  28:          /// <summary>
  29:          /// Фамилия текущего доменного пользователя
  30:          /// </summary>
  31:          /// <returns>Фамилия</returns>
  32:          public static string GetCurrentUserSurname() {
  33:              return UserPrincipal.Current.Surname;
  34:          }
  35:   
  36:          /// <summary>
  37:          /// Примечание, относящееся к текущему доменному пользователю
  38:          /// </summary>
  39:          public static string GetCurrentUserDescription() { return UserPrincipal.Current.Description; }
  40:   
  41:          /// <summary>
  42:          /// Отображаемое имя текущего доменного пользователя
  43:          /// </summary>
  44:          public static string GetCurrentUserDisplayName() { return UserPrincipal.Current.DisplayName; }
  45:   
  46:          /// <summary>
  47:          /// Адрес электронной почты текущего доменного пользователя
  48:          /// </summary>
  49:          public static string GetCurrentUserEmailAddress() { return UserPrincipal.Current.EmailAddress; }
  50:   
  51:          /// <summary>
  52:          /// Перечень доменных групп, в состав которых входит текущий доменный пользователь
  53:          /// </summary>
  54:          public static string[] GetCurrentUserDomainGroups() { return UserPrincipal.Current.GetGroups().Select(n => n.Name).ToArray(); }
  55:   
  56:          /// <summary>
  57:          /// Получить полный перечень доменных групп, имеющихся в составе определённого домена
  58:          /// </summary>
  59:          /// <param name="DomainName">Имя домена, для которого следует получить перечень всех его доменных групп</param>
  60:          /// <returns>Имена доменных групп, входящих в состав указанного домена</returns>
  61:          public static IEnumerable<string> GetDomainGroups(string DomainName) {
  62:              using (var context = new PrincipalContext(ContextType.Domain, DomainName))
  63:              using (var queryFilter = new GroupPrincipal(context))
  64:              using (var searcher = new PrincipalSearcher(queryFilter)) {
  65:                  foreach (var result in searcher.FindAll()) {
  66:                      yield return result.SamAccountName;
  67:                      result.Dispose();
  68:                  }
  69:              }
  70:          }
  71:   
  72:          /// <summary>
  73:          /// Получить имена всех доменных групп, входящих в состав текущего домена
  74:          /// </summary>
  75:          /// <returns>Имена всех доменных групп текущего домена</returns>
  76:          public static IEnumerable<string> GetDomainGroups() {
  77:              return GetDomainGroups(Domain.GetCurrentDomain().Name);
  78:          }
  79:   
  80:          /// <summary>
  81:          /// Обладает ли текущий пользователь правами администратора для данной локальной машины
  82:          /// </summary>
  83:          /// <returns>true - да, false - нет.</returns>
  84:          [DllImport("shell32.dll")]
  85:          public static extern bool IsUserAnAdmin();
  86:      }
  87:  }


Comments