Идентификация пользователя (Lotus Notes)

Тема в разделе "Lotus - Программирование", создана пользователем prof2008, 1 сен 2009.

  1. prof2008

    prof2008 Гость

    Добрый день !!! Помогите пожалуйста !!!

    Есть общая БД - и два пользователя Сидоров и Иванов
    заходят под одним логином например "Отдел снабжения"
    а вот идентифицировать никак не могу в виде (View)
    хотел вставить колонку и формулу например @Enviroment(ComputerName)
    чтобы разделить пользователей при отправке сообщений
    но не могу получить строку хотя бы имени компьютера
    есть стандартные средства ????

    Lotus Notes 6 & 7

    e-mail prof2008@mail.ru

    Заранее спасибо.
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
    есть варианты, но зачем, выдайте им разные ID файлы - так будет правильнее
     
  3. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.019
    Симпатии:
    8
    Если база лежит на сервере, то и @Environment на сервере выполняется, поэтому не поможет.
     
  4. prof2008

    prof2008 Гость

    Спасибо за ответы !!!
    "выдайте им разные ID файлы - так будет правильнее"
    это и понятно !!! но ID один !!!! иначе надо лицензии покупать на 3 ПК
    а нам хотелось бы чтобы работали под одной учетной записью отдел снабжения
    а вот для внутр контроля кто отправлял письмо писать в отдельную колонку имя пользователя windows или имя компьютера !!!!
    Или IP адрес
     
  5. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
  6. azat20

    azat20 Well-Known Member

    Регистрация:
    22 июл 2008
    Сообщения:
    244
    Симпатии:
    0
    В версии 8.5 в письмах есть поле IPAddress. Не помню это с 8.5 началось?
     
  7. prof2008

    prof2008 Гость

    У меня 6 и 7 значит никак плохо !!!
     
  8. Klido

    Klido Гость

    достаточно подключить winapi и получишь практически всё про клиентское место пользователя - включая сетевое имя...
    хотя да. винскриптом быстрее:
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">код</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='vb'>Set WSHNetwork = CreateObject("WScript.Network")

    strDomain = WSHNetwork.UserDomain
    strUserName = WSHNetwork.UserName
    strComputerName = WSHNetwork.ComputerName

    Set IPConfigSet =
    GetObject("winmgmts:{impersonationLevel=impersonate}").ExecQuery _
    ("select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

    Forall IPConfig In IPConfigSet
    If Not Isnull(IPConfig.IPAddress) Then
    For i=Lbound(IPConfig.IPAddress) To Ubound(IPConfig.IPAddress)
    If strIPAddress = "" Then
    strIPAddress = IPConfig.IPAddress(i)
    Else
    strIPAddress = strIPAddress & ", " & IPConfig.IPAddress(i)
    End If
    Next
    End If
    End Forall[/CODE]
     
  9. susinmn

    susinmn Well-Known Member

    Регистрация:
    16 окт 2007
    Сообщения:
    530
    Симпатии:
    8
    Код (Text):
    Set WNetwork = CreateObject("WScript.Network")
    Set WMIService = GetObject("winmgmts:\\" + WNetwork.ComputerName + "\root\cimv2")
    Set IPConfigSet = WMIService.ExecQuery("Select IPAddress from Win32_NetworkAdapterConfiguration where IPEnabled=TRUE")

    Forall IPConfig In IPConfigSet
    If Not Isnull(IPConfig.IPAddress) Then
    ip=IPConfig.IPAddress
    End If
    End Forall
     
  10. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    Надо учитывать, что у клиента может быть более одного IP-адреса. Например, он имеет 2 сетевые карточки.

    У меня есть пример получения через WMI. Только надо как-то отличить записи именно для сетевого адаптера, типа по не пустому MACAddress. Схема
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">такая</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='ls'> Set g_objWMIService = GetObject(\"winmgmts:\\\\\" & ComputerName & \"\\root\\cimv2\")

    ObjName = \"Win32_NetworkAdapterConfiguration\"

    Set colItems = g_objWMIService.ExecQuery(\"Select * from \" & Objname & \" \" )

    Forall IPConfig In colItems
    Set CurrDoc = New NotesDocument(g_CurrDB)
    CurrDoc.form = Objname
    CurrDoc.ComputerName = g_ComputerName
    Forall eachProp In IPConfig.Properties_
    If Not(Isnull(eachProp.Value)) And EachProp.name <> \"Index\" Then
    NotesFieldName = \"x_\" & EachProp.name
    Call AddValue( CurrDoc, NotesFieldName, eachProp.Value)

    End If
    End Forall
    Call CurrDoc.Save(1,1)
    End Forall

    Sub AddValue( WorkingDoc As NotesDocument, FieldName As String, PropVal As Variant)
    Dim TempItem As NotesItem
    Set TempItem = WorkingDoc.GetFirstItem(FieldName)
    Dim NewValue
    Dim CountInt As Integer
    Select Case Typename(PropVal)
    Case \"STRING\"
    NewValue =PropVal
    Case \"STRING( )\"
    NewValue =PropVal
    Case \"INTEGER\",\"LONG\",\"BOOLEAN\",\"BYTE\"
    NewValue =Cstr(PropVal)
    Case \"VARIANT( )\" , \"INTEGER( )\"
    Redim NewValue(Ubound(propVal)) As String
    For CountInt = Lbound(PropVal) To Ubound(propVal)
    NewValue(CountInt) =Cstr(PropVal(CountInt))
    Next
    Case Else
    NewValue = Inputbox (\"\",\"\",Typename(PropVal))
    End Select

    If tempItem Is Nothing Then
    Call WorkingDoc.replaceItemValue(FieldName, NewValue)
    Else
    TempItem.Values = Arrayappend(TempItem.values,NewValue)
    End If
    End Sub[/CODE]
    В результате получаем документы приблизительно такого
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">содержания</div></div><div class="sp-body"><div class="sp-content">x_Caption [00000008] Intel® PRO/100 VE Network Connection
    x_Description Intel® PRO/100 VE Network Connection - Packet Scheduler Miniport
    x_DHCPEnabled False
    x_IPEnabled True
    x_IPXEnabled False
    x_MACAddress 00:0E:7D:23:31:BC
    x_ServiceName E100B
    x_SettingID {F0C5EAE5-6F2D-4D14-B360-86068341D3F6}
    x_DatabasePath %SystemRoot%\\System32\\drivers\\etc
    x_DeadGWDetectEnabled True
    x_DNSEnabledForWINSResolution False
    x_DNSHostName computer
    x_DNSServerSearchOrder 190.254.0.1, 190.254.0.2
    x_IPAddress 190.254.0.15
    x_IPConnectionMetric 20
    x_IPFilterSecurityEnabled False
    x_IPSecPermitIPProtocols 0
    x_IPSecPermitTCPPorts 0
    x_IPSecPermitUDPPorts 0
    x_IPSubnet 255.255.0.0
    x_KeepAliveTime 7200000
    x_PMTUDiscoveryEnabled True
    x_TcpipNetbiosOptions 0
    x_WINSEnableLMHostsLookup True
    x_WINSScopeID
    Во, susinmn точнее написал.
     
  11. oshmianski

    oshmianski Гость

    мои
    <div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">5 копеек</div></div><div class="sp-body"><div class="sp-content"><!--shcode--><pre><code class='ls'>'WinAPI для определения windows имени пользователя и ip машины
    Private Const LOG_MAX_IP = 5 'To make a buffer... i dont think you have more than 5 ip on your pc..
    Private Const LOG_MAX_COMPUTERNAME_LENGTH = 31

    Private Type LOG_IPINFO
    dwAddr As Long ' IP address
    dwIndex As Long ' interface index
    dwMask As Long ' subnet mask
    dwBCastAddr As Long ' broadcast address
    dwReasmSize As Long ' assembly size
    unused1 As Integer ' not currently used
    unused2 As Integer '; not currently used
    End Type

    Private Type LOG_MIB_IPADDRTABLE
    dEntrys As Long 'number of entries in the table
    mIPInfo (LOG_MAX_IP) As LOG_IPINFO 'array of IP address entries
    End Type

    Private Type LOG_IP_Array
    mBuffer As LOG_MIB_IPADDRTABLE
    BufferLen As Long
    End Type

    Declare Private Sub LOG_CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, Byval Length As Long)

    Declare Private Function LOG_GetIpAddrTable Lib "IPHlpApi" Alias "GetIpAddrTable" (pIPAdrTable As Byte, pdwSize As Long, Byval Sort As Long) As Long

    Declare Private Function LOG_GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (Byval lpBuffer As String, nSize As Long) As Long

    Declare Private Function LOG_GetComputerName Lib "kernel32" Alias "GetComputerNameA" (Byval lpBuffer As String, nSize As Long) As Long

    Private Function INNER_Get_IP_List (log_IP_List () As String) As Boolean
    On Error Goto errorHandler
    INNER_Get_IP_List = False

    Dim Ret As Long, Tel As Long
    Dim bBytes () As Byte
    Dim Listing As LOG_MIB_IPADDRTABLE
    Dim t1 As LOG_IPINFO, t2, t3

    Call LOG_GetIpAddrTable (Byval 0&, Ret, True)

    If Ret <= 0 Then Exit Function
    Redim bBytes (0 To Ret - 1) As Byte

    'retrieve the data
    Call LOG_GetIpAddrTable (bBytes(0), Ret, False)

    'Get the first 4 bytes to get the entry's.. ip installed
    Call LOG_CopyMemory (Listing.dEntrys, bBytes (0), 4)

    Redim log_IP_List (Listing.dEntrys - 1)

    For Tel = 0 To Listing.dEntrys - 1
    t1 = Listing.mIPInfo (Tel)
    t2 = bBytes (4 + (Tel * Len (Listing.mIPInfo (0))))
    t3 = Len (Listing.mIPInfo (Tel))
    Call LOG_CopyMemory (Listing.mIPInfo (Tel), bBytes (4 + (Tel * Len (Listing.mIPInfo (0)))), Len (Listing.mIPInfo(Tel)))
    log_IP_List (Tel) = INNER_ConvertAddressToString (Listing.mIPInfo (Tel).dwAddr)
    Next

    INNER_Get_IP_List = True
    ex:
    Exit Function

    errorHandler:
    Call INNER_ProcessError (MODULE_NAME, Err, Error, Erl, Lsi_info (2), Lsi_info (12))
    Resume ex
    End Function

    Private Function INNER_ConvertAddressToString (longAddr As Long) As String
    Dim myByte (3) As Byte
    Dim Cnt As Long

    Call LOG_CopyMemory (myByte(0), longAddr, 4)

    For Cnt = 0 To 3
    INNER_ConvertAddressToString = INNER_ConvertAddressToString + Cstr (myByte (Cnt)) + "."
    Next Cnt

    INNER_ConvertAddressToString = Left$ (INNER_ConvertAddressToString, Len (INNER_ConvertAddressToString) - 1)
    End Function[/CODE]
    использовать аккуратно - можно повалить notes
     
  12. iosif88

    iosif88 Well-Known Member

    Регистрация:
    14 окт 2009
    Сообщения:
    97
    Симпатии:
    0
    Всем большое спасибо за активную помощь.

    Вам susinmn, отдельное спасибо, ваш код я и применил ;)
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
  14. HelenHelen

    HelenHelen Well-Known Member

    Регистрация:
    31 авг 2011
    Сообщения:
    75
    Симпатии:
    0
    Добрый день, коллеги!

    Скажите, пожалуйста, есть ли возможность программно получить IPшник и/или имя компа, с которого открыта сессия?

    Заранее спасибо!
     
  15. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.046
    Симпатии:
    18
    конечно
    как по мне самый правильный это с консоли сервера: show user -xml
     
  16. HelenHelen

    HelenHelen Well-Known Member

    Регистрация:
    31 авг 2011
    Сообщения:
    75
    Симпатии:
    0
    Задача стоит немножко иная. Нужно, чтобы в отдельную базу протоколировались действия пользователя, и нужно отслеживать, с какой машины он их совершает, это для безопасников. Можно ли получить этот параметр средствами LS?
     
  17. nvyush

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
  18. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    лучше использовать то, что выдает больше инфы и не зависит от платформы
    айпи может быть недостаточно, особливо для сетей с ДХЦП, а вот МАКадрес - самое оно
     
  19. HelenHelen

    HelenHelen Well-Known Member

    Регистрация:
    31 авг 2011
    Сообщения:
    75
    Симпатии:
    0
  20. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    м-да, похоже "глухи" разработчики к "грамотному подходу", по принципу схватил что попало и побежал...

    Добавлено:
    оно не работает на платформе в общем её понимании (а не виндовзонли), оно не возвращает деталей, кот. больше интересны секурити, чем просто IP адрес (он динамический и мало несёт информации)
     
Загрузка...

Поделиться этой страницей