• Познакомьтесь с пентестом веб-приложений на практике в нашем новом бесплатном курсе

    «Анализ защищенности веб-приложений»

    🔥 Записаться бесплатно!

  • CTF с учебными материалами Codeby Games

    Обучение кибербезопасности в игровой форме. Более 200 заданий по Active Directory, OSINT, PWN, Веб, Стеганографии, Реверс-инжинирингу, Форензике и Криптографии. Школа CTF с бесплатными курсами по всем категориям.

Список Юзеров С Определенной Ролью?

Eugen

Green Team
22.03.2012
210
1
BIT
1
Добрый день.
Такой вопрос - возможно ли программно получить список пользователей, обладающих определенной ролью? Если кто-нибудь делал нечто похожее, подскажите пожалуйста.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Можно. Смотри хелп. Там даже примеры есть
NotesACL class
NotesACLEntry class
 

Kizarek86

Green Team
20.07.2007
871
7
BIT
33
ИМХО самый простой способ это перебор всех пользователей, если их число не велико.
roles = notesDatabase.QueryAccessRoles( name$ )
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
ИМХО самый простой способ это перебор всех пользователей, если их число не велико.
roles = notesDatabase.QueryAccessRoles( name$ )
И что это будет? Роли пользователя? нужно на оборот. Что-то вроде этого
Код:
Function GetUserByRoles( Role As String, separator As String ) As String
Dim ACL As NotesACL
Dim ACLentry As NotesACLEntry
Dim Result As String


Set ACL = db.ACL
Set ACLentry = ACL.GetFirstEntry

If separator = "" Then
separator = ", "
End If

While Not ACLentry Is Nothing

Forall r In ACLentry.Roles

If r = Role Then
Result = Result & ACLentry.Name & separator
End If

End Forall

Set ACLentry = ACL.GetNextEntry( ACLentry )
Wend

GetUserByRoles = Result

End Function
 
N

nvyush

NickProstoNick
Вместо
Код:
Forall r In ACLentry.Roles			
If r = Role Then
проще использовать
Код:
If ACLentry.IsRoleEnabled(role) Then
Также нужно учитывать, что мы получаем имена записей ТУД, а не имена пользователей, там могут быть и группы. Для развёртывания групп можно использовать @ExpandNameList.
 

Eugen

Green Team
22.03.2012
210
1
BIT
1
Проблема в том, что если пользователь включен в группу, и группе назначена роль, то isRoleEnabled пишет, что нет, типа для этого человека такой роли нет.


ЗЫ:Упс...долго не обновлял страницу, много чего нового появилось.
 
N

nvyush

Проблема в том, что если пользователь включен в группу, и группе назначена роль, то isRoleEnabled пишет, что нет, типа для этого человека такой роли нет.
db.QueryAccessRoles("userName") вернёт все роли пользователя, даже если он включен в ACL через группу.
 

NickProstoNick

Статус как статус :)
Lotus Team
22.08.2008
1 851
27
BIT
0
Проблема в том, что если пользователь включен в группу, и группе назначена роль, то isRoleEnabled пишет, что нет, типа для этого человека такой роли нет.


ЗЫ:Упс...долго не обновлял страницу, много чего нового появилось.
Блин... ну тебе готовый код что ли дать? а самому додумать?
Тут уже почти готовое решение...
 
T

TIA

>Такой вопрос - возможно ли программно получить список пользователей, обладающих определенной ролью?
В общем случае не возможно. Роль назначается через ACLEntry. А ACLEntry может соответствовать открытой группе, т.е. с неопределённым составом участников, это Default, Anonymous, маски (*/ACME/COM).
Лишь открывая БД определяется, какой из ACLEntry имя пользователя соответствует.
 

Eugen

Green Team
22.03.2012
210
1
BIT
1
Пробую немного по-другому. Забил на получение роли пользователя. Надо получить состав группы и разослать письма этой группе.
Пытаюсь обратиться к Names.nsfи получить состав группы как текст. Если вручную в коде прописать получателей - работает. Если по содержимому текстового поля - не работает.
Код:
Sub SendMail (GroupName As String)
Dim Session As New NotesSession
Dim db As NotesDatabase
Dim message As NotesDocument

Dim NamesNSF As NotesDatabase
Dim GroupsView As NotesView
Dim GroupCol As NotesDocumentCollection
Dim Group As NotesDocument
Dim Members As NotesItem
Dim servername As String
Dim path As String

servername="SERVER01"
path="names.nsf"	
Set NamesNSF= New NotesDatabase(servername,path)
If Not NamesNSF.Isopen Then
Call NamesNSF.Open(servername,path)
End If

Set GroupsView=NamesNSF.Getview("Groups")
Set GroupCol=GroupsView.Getalldocumentsbykey(GroupName, True)
Set Group=GroupCol.Getfirstdocument()
Set members=Group.Getfirstitem("Members")

Set db=session.CurrentDatabase
Set Message=db.Createdocument()
message.Form = "Memo"
message.Subject = "Уведомление о новой заявке на потребительский кредит"
message.Principal="Потребительское кредитование"
Message.SendTo=Members.Text
Call message.send(False)

End Sub
Лезет ошибка: "Unable to send mail, no match found in Name & Address books", на шаге Call message.send(False), не смотря на то, что список получателей присвоился item`ам.
 
N

nvyush

Ошибка в этой строке:
Код:
Message.SendTo=Members.Text
замените на:
Код:
Message.SendTo=Members.Values
Хотя не понятно, зачем раскрывать группу, вполне можно и так (если группа почтовая или многоцелевая):
Код:
Message.SendTo = GroupName
 
Мы в соцсетях:

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