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

Eugen

Well-known member
22.03.2012
177
0
#1
Добрый день.
Такой вопрос - возможно ли программно получить список пользователей, обладающих определенной ролью? Если кто-нибудь делал нечто похожее, подскажите пожалуйста.
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#2
Можно. Смотри хелп. Там даже примеры есть
NotesACL class
NotesACLEntry class
 

Kizarek86

Lotus team
20.07.2007
864
4
#3
ИМХО самый простой способ это перебор всех пользователей, если их число не велико.
roles = notesDatabase.QueryAccessRoles( name$ )
 

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#4
ИМХО самый простой способ это перебор всех пользователей, если их число не велико.
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
 

nvyush

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

Eugen

Well-known member
22.03.2012
177
0
#6
Проблема в том, что если пользователь включен в группу, и группе назначена роль, то isRoleEnabled пишет, что нет, типа для этого человека такой роли нет.


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

nvyush

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

NickProstoNick

Статус как статус :)
Lotus team
22.08.2008
1 809
21
#8
Проблема в том, что если пользователь включен в группу, и группе назначена роль, то isRoleEnabled пишет, что нет, типа для этого человека такой роли нет.


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

TIA

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

Eugen

Well-known member
22.03.2012
177
0
#11
Пробую немного по-другому. Забил на получение роли пользователя. Надо получить состав группы и разослать письма этой группе.
Пытаюсь обратиться к 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`ам.
 

nvyush

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