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

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

Eugen

Green Team
22.03.2012
210
1
Добрый день.
Такой вопрос - возможно ли программно получить список пользователей, обладающих определенной ролью? Если кто-нибудь делал нечто похожее, подскажите пожалуйста.
 
Можно. Смотри хелп. Там даже примеры есть
NotesACL class
NotesACLEntry class
 
ИМХО самый простой способ это перебор всех пользователей, если их число не велико.
roles = notesDatabase.QueryAccessRoles( name$ )
 
ИМХО самый простой способ это перебор всех пользователей, если их число не велико.
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
 
NickProstoNick
Вместо
Код:
Forall r In ACLentry.Roles			
If r = Role Then
проще использовать
Код:
If ACLentry.IsRoleEnabled(role) Then
Также нужно учитывать, что мы получаем имена записей ТУД, а не имена пользователей, там могут быть и группы. Для развёртывания групп можно использовать @ExpandNameList.
 
Проблема в том, что если пользователь включен в группу, и группе назначена роль, то isRoleEnabled пишет, что нет, типа для этого человека такой роли нет.


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


ЗЫ:Упс...долго не обновлял страницу, много чего нового появилось.
Блин... ну тебе готовый код что ли дать? а самому додумать?
Тут уже почти готовое решение...
 
>Такой вопрос - возможно ли программно получить список пользователей, обладающих определенной ролью?
В общем случае не возможно. Роль назначается через ACLEntry. А ACLEntry может соответствовать открытой группе, т.е. с неопределённым составом участников, это Default, Anonymous, маски (*/ACME/COM).
Лишь открывая БД определяется, какой из ACLEntry имя пользователя соответствует.
 
Пробую немного по-другому. Забил на получение роли пользователя. Надо получить состав группы и разослать письма этой группе.
Пытаюсь обратиться к 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`ам.
 
Ошибка в этой строке:
Код:
Message.SendTo=Members.Text
замените на:
Код:
Message.SendTo=Members.Values
Хотя не понятно, зачем раскрывать группу, вполне можно и так (если группа почтовая или многоцелевая):
Код:
Message.SendTo = GroupName
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab

Похожие темы