• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

Как Получить Имена Всех Груп Где Состоит Заданный Юзер

  • Автор темы yerke
  • Дата начала
Y

yerke

привет всем
как получить имена всех груп где состоит заданный юзер (а не тукущий)? (без поиска в АК во вьюшке "группы")
а еще чтоб вернулись и те группы, где юзер не прописан в прямую (группа в группе).

(или надо чтобы @UserNamesList вовращала все групппу и итп не только для текущего юзера и для заданного )))
(или как работает Effective Access в АСL?)
 

Вложения

  • _2BA12357A7E9307D.jpg
    _2BA12357A7E9307D.jpg
    48,6 КБ · Просмотры: 625

Darkhan

Green Team
14.12.2012
99
2
BIT
0
По мне, лучше где-нибудь "кэшировать" вхождения (по расписанию).
 

savl

Lotus Team
28.10.2011
2 597
310
BIT
179
По группам быстрого решения нет, для произвольного пользователя (или я еще его не знаю :) )
Если он есть в ACL напрямую то можно часть информации получить так:
NotesDatabase class
Методы:
QueryAccess (доступ)
QueryAccessPrivileges (привелегии)
QueryAccessRoles (роли)
Если его нет, то почитай описание методов, там указано.

По поводу групп:


Эти две ссылки взяты из темы, которую стоит прочитать полностью.
Ссылка на 19е сообщение из темы
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Думаю без АК не обойтись/
Тебе же надо знать в каких группах в принципе состоит пользователь.
 
Y

yerke

всем спасибо
перечитал все предложенные мануалы
и на основе их создал новый класс
Код:
Public Class GroupManager

'=properties
Public Session As NotesSession
Public CurrentDatabase As NotesDatabase
Public AddressBook As NotesDatabase
Public AddressBookView As NotesView

'=constructor
Public Sub New

On Error Goto processError

Set Session = New NotesSession
Set CurrentDatabase = Session.CurrentDatabase
Set AddressBook = Session.GetDatabase(CurrentDatabase.Server, "names.nsf", False)
If AddressBook Is Nothing Then Error 1984, "Невозможно получить адресную книгу!"
Set AddressBookView = AddressBook.GetView("($ServerAccess)")
If AddressBookView Is Nothing Then Error 1984, "Невозможно получить представление в адресной книге!"
Call AddressBookView.Refresh()
AddressBookView.AutoUpdate = False

Exit Sub
processError:
Error Err, "-> CLASS: " + Typename(Me) + "-> " + Cstr(Getthreadinfo(1)) + " (" + Cstr(Erl) + ") " + Error$
End Sub

'=methods
Public Function GetGroupsForUser(UserName As String) As Variant

Dim nn As Variant
Dim AllGroups As Variant
Dim k As Integer
Dim dcol As NotesDocumentCollection
Dim doc As NotesDocument		

On Error Goto processError

GetGroupsForUser = Split("", "")

nn = Trim(Cstr(UserName))
If nn = "" Then nn = Session.UserName
Set nn = New NotesName(nn)
nn = Trim(Cstr(nn.Canonical))

AllGroups = Split("", "")
AllGroups = Arrayunique(Fulltrim(Arrayappend(AllGroups, nn)), 5)
k = -1

Do
k = k + 1
Set dcol = AddressBookView.GetAllDocumentsByKey(AllGroups(k), True)
If dcol.Count > 0 Then
Set doc = dcol.GetFirstDocument()
Do While Not doc Is Nothing
If Not Isnull(Arraygetindex(doc.Members, AllGroups(k), 5)) Then AllGroups = Arrayunique(Fulltrim(Arrayappend(AllGroups, doc.ListName)), 5)
Set doc = dcol.GetNextDocument(doc)
Loop
End If
Loop While k < Ubound(AllGroups)

GetGroupsForUser = Fulltrim(Arrayreplace(AllGroups, AllGroups(0), ""))

ENDING:
GetGroupsForUser = Arrayunique(Fulltrim(GetGroupsForUser), 5)

Exit Function
processError:
Error Err, "-> CLASS: " + Typename(Me) + "-> " + Cstr(Getthreadinfo(1)) + " (" + Cstr(Erl) + ") " + Error$
End Function

End Class
 
Y

yerke

строчку
If Not Isnull(Arraygetindex(doc.Members, AllGroups(k), 5)) Then AllGroups = Arrayunique(Fulltrim(Arrayappend(AllGroups, doc.ListName)), 5)

заменить просто на
AllGroups = Arrayunique(Fulltrim(Arrayappend(AllGroups, doc.ListName)), 5)
 

NetWood

Lotus Team
17.04.2008
545
93
BIT
8
Вот еще песочница вам в помощь. Похожие темы поднимались неоднократно.



About Group Maint Demo
This database is a subset of the design of the Domino Address Book, with code added to manipulate Group records. There are several sample agents ("GMan Samples") to demonstrate typical applications.
The coding is done using two custom classes, NotesGroup and NotesGroupManager. These are stored in the LotusScript library "GroupManager".
See the Help Using document for a complete description of the classes that implement this functionality.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!