> проекты > компоненты инфраструктуры
UserInfo

Введение

       Большинство intranet-решений, создаваемых для реализации тех или иных бизнес-процессов внутри компании, имеют сущность Пользователь в предметной области решения (например, Автоматизированное расписание сотрудников). Помимо задачи идентификации пользователя, работающего посредством Web-браузера, необходимо так же получать расширенную информацию о нем: фамилия, имя, отчество, e-mail и т.п. Наиболее простой подход использован в расписании, где информация о пользователе хранится в базе данных. Минус такого подхода заключается в том, что необходима предварительная регистрация пользователя и более того, вся информация о нем фактически дублирует аналогичные сведения из базы данных пользователей PDC (primary domain controller, в дальнейшем - технология Active Directory).

      Предлагаемый компонент позволяет определять уникальное имя пользователя открывшего сессию в Web-браузере (например, CRUSOE\ESavitsky - включая домен), определять по этому имени ФИО пользователя, определять ФИО пользователя текущей сессии, а также различные представления имен пользователей, определяемые системой.

Установка

       Компонент регистрируется (через regsvr32) на Web-сервере, на котором расположено intranet-решение. В дальнейшем, если вам понадобится компонент UserTranslate, его дополнительно необходимо зарегистрировать как COM+ приложение (причем только его, компонент ThreadUserInfo необходимо исключить, так как он возвращает информацию о владельце нити). COM+ приложение необходимо настроить под запуск под учетной записью конкретного пользователя, входящего в группу локальных администраторов Web-сервера.

Описание интерфейсов
ThreadUserInfo - информация о пользователе-владельце нити (который открыл сессию в Web-браузере)
  • getLogonName([out, retval] BSTR *pName) - возвращает уникальное logon-имя пользователя (вклчая домен).
  • getDisplayName([out, retval] BSTR *pName) - возвращает ФИО пользователя.
  • getFullyQualifiedDN([out, retval] BSTR *pName) - FullyQualifiedDN
  • getSAMCompatibleName([out, retval] BSTR *pName) - SAMCompatibleName
  • getCanonicalName([out, retval] BSTR *pName) - CanonicalName
  • getLastErrorText([out, retval] BSTR *pName) - Получить текст последней ошибки.
    ProgIDIPM.ThreadUserInfo
    Потоковая модельApartment
    CLSID{FE6F084B-9827-4107-9E8F-74A0C93ADDC9}
    Версия1
    UserTranslate - для получения информации о пользователе по его logon-имени.
  • getDisplayBySAM([in] BSTR logon, [out, retval] BSTR *pVal) - возвращает ФИО пользователя по logon-имени.
    ProgIDIPM.UserTranslate
    Потоковая модельApartment
    CLSID{77B1660C-DAE0-4D39-BD7B-AA371D299DCC}
    Версия1
    Получить список всех пользователей домена
    ======================= domainusers.vbs ===========================
    sDomain = "TRINITY"
    Set oDomain = GetObject("WinNT://"& sDomain)
    oDomain.Filter = Array("User")
    
    strXML = "<" & sDomain & ">" & VbCrLf
    
    For Each oADobject In oDomain
    	strXML = strXML & vbTab & "<user logon=""" & oADobject.Name & _
    		""" fullname=""" & oADobject.FullName & """ />" & VbCrLf
    Next
    strXML = strXML & VbCrLf & "</"& sDomain & ">"
    
     Set FSO = WScript.CreateObject("Scripting.FileSystemObject")
     Set txtStream = FSO.CreateTextFile(sDomain & ".users.xml")
    
     txtStream.Write strXML
    ==================================================================
    
    В результате будет сформирован xml-документ со списком всех пользователей домена, который можно подредактировать и использовать в качестве базы данных пользователей в intranet-решениях.

     Evgeny Savitsky © 2002-2003