Вапрос по группам в Acl

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

rm2005

#1
Добрый день!

В ACL пользователи прописаны не явно а по группам. Можно ли при помощи скрипта получить содержание определённой группы?
Это необходимо для показа в форме кнопки какой-то определённый момент определённой группы в ACL.
 
R

Ronchik

#2
<!--QuoteBegin-rm2005+4:09:2007, 09:51 -->
<span class="vbquote">(rm2005 @ 4:09:2007, 09:51 )</span><!--QuoteEBegin-->Можно ли при помощи скрипта получить содержание определённой группы?
[snapback]77164" rel="nofollow" target="_blank[/snapback]​
[/quote]
из базы names.nsf
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#4
http://codeby.net/forum/threads/12343.htm

Код не мой. Я просто разместил объяву. :)
Get User Groups
This is an example of a recursive function that gets all the groups that a user is in, including nested
groups. I’ve included an example Initialize sub from an agent to demonstrate the use.
Sub Initialize
'** Determine the groups that the current user is in, including
'** all nested groups
On Error Goto processError
Dim session As New NotesSession
Dim db As NotesDatabase
Dim view As NotesView
Dim serverName As String
Dim userName As String
Dim groupList As Variant
serverName = "MyNABServer"
userName = session.UserName
Set db = session.GetDatabase( serverName, "names.nsf" )
Set view = db.GetView( "Groups" )
'** create a text file for output
fileNum% = Freefile()
fileName$ = "C:\UserGroupInfo.txt"
Open fileName$ For Output As fileNum%
Print #fileNum%, "User Group Info for " & userName & " on " & serverName
Print #fileNum%, ""
'** get the group information
Call GetGroups( userName, view, "", 0, fileNum% )
'** close the file and exit
Close fileNum%
Exit Sub
processError:
Messagebox "Error " & Cstr(Err) & ": " & Error$
Reset
Exit Sub
End Sub

Function GetGroups (lookupName As String, groupView As NotesView, alreadyUsed As
String, _
indentLevel As Integer, fileNum As Integer)
'** This sub will recursively iterate through all the groups in the NAB,
'** figuring out which ones the given user or group is in.
On Error Goto processError
Dim doc As NotesDocument
Dim memberItem As NotesItem
Dim groupName As String
Dim tabString As String
'** use tabString to indent the entry, indicating that a group is a
'** member of the group below it
For i% = 1 To indentLevel
tabString = tabString & Chr(9)
Next
'** step through the group documents in the NAB that we're looking at
Set doc = groupView.GetFirstDocument
Do While Not (doc Is Nothing)
Set memberItem = doc.GetFirstItem( "Members" )
groupName = doc.ListName(0)
'** Check for direct inclusion in a group. If the lookup name is
'** in the Members text list and we haven't already used the group
'** (if we did, it will be in the alreadyUsed string, and would
'** represent a circular reference), output the group name to our
'** file and recurse
If (memberItem.Contains( lookupName )) And (Instr(1, alreadyUsed, "~" & groupName
& "~", 5) < 1) Then
Print #fileNum%, tabString & groupName
'** recursion will find other groups that this group is
'** a member of
Call GetGroups( groupName, groupView, alreadyUsed & "~" & groupName & "~",
indentLevel + 1, fileNum )
End If
Set doc = groupView.GetNextDocument( doc )
Loop
Exit Function
processError:
Print #fileNum%, "Error " & Cstr(Err) & ": " & Error$
Exit Function
End Function
 
R

rm2005

#5
Для: Medevic
Отличная функция всё работает, ну немного подработал её. Ну вот теперь вопрос возник. Человек найденный в группе доступа, не имеет прав на редактирование документа, т.к. в авторских полях его нет, а есть его группа, а по группе доступ не предоставляется.
как быть в этом случае? Раскрывать группы в авторские поля это я думаю не выход, т.к. группы по 400 человек.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#6
<!--QuoteBegin-rm2005+7:09:2007, 14:07 -->
<span class="vbquote">(rm2005 @ 7:09:2007, 14:07 )</span><!--QuoteEBegin-->Отличная функция всё работает, ну немного подработал её. Ну вот теперь вопрос возник. Человек найденный в группе доступа, не имеет прав на редактирование документа, т.к. в авторских полях его нет, а есть его группа, а по группе доступ не предоставляется.
[snapback]77474" rel="nofollow" target="_blank[/snapback]​
[/quote]
Группа должна быть типа Multi-purpose или Access Control List only чтобы доступ работал. У тебя так?
 
K

K-Fire

#8
Хмм, как это группе доступ не предоставляется? Или я уже не соображаю чего в пятницу вечером? :)

Кстати, лучше всего давать доступ роли, а группе назначать эту роль в ацле. Такая схема лучше во всех отношениях.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#9
<!--QuoteBegin-rm2005+7:09:2007, 14:30 -->
<span class="vbquote">(rm2005 @ 7:09:2007, 14:30 )</span><!--QuoteEBegin-->у меня группа Multi-purpose
[snapback]77477" rel="nofollow" target="_blank[/snapback]​
[/quote]
Видимо, я не так понял. Нужно дать права редактирования конкретному человеку из группы? Тогда пропиши его в авторском поле.
 
R

rm2005

#10
Для: Medevic
Именно то я и хочу сделать. Ситуация такая. Я не могу человека прописать в поле из группы доступа, т.к. я не знаю кто именно из группы будет работать с доком, а всех людей из группы в поле авторс я думаю тоже не целесобразно добавлять.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#11
Для: rm2005
Понятно. Нужно динамически раздавать права доступа? :)
Так просто этого не сделать. Могу предложить организовать через серверного агента.
Пример:
Есть общий документ. Он содержит общедоступную информацию. Делаем там кнопки "Получить данные №1", "Получить данные №2". Данные №1 и данные №2 - это документы с приватными данными. Доступ к ним имеет пользователь с определенной ролью. Лучше, если этот пользователь сервер.
Теперь в событии PostOpen общего документа вызываем серверный агент, который создаёт копии документов с приватными данными. Копии эти можно сделать доступными только текущему пользователю. Т.е. прописать его в соответствующих полях доступа. Пользователь открывает эти документы по кнопкам, работаем с ними. Потом, когда сохраняет их, вызываем серверного агента, который закачивает данные из копий в нормальные документы.
Копии каждую ночь удаляем шедульным агентом.
 
30.05.2006
1 345
11
#12
Кстати, лучше всего давать доступ роли, а группе назначать эту роль в ацле. Такая схема лучше во всех отношениях.
Не во всех. Роли имеют одно неприятное свойство: они быстро кончаются. ACL может содержать всего 60 с чем-то ролей.
Мне досталась по наследству такая база. Её спихнули мне, когда число филиалов в компании зашкалило за 100. Пришлось ВСЕ переделывать... Врагу не пожелаю
 
G

Guest

#13
<!--QuoteBegin-Constantin A Chervonenko+10:09:2007, 14:14 -->
<span class="vbquote">(Constantin A Chervonenko @ 10:09:2007, 14:14 )</span><!--QuoteEBegin-->Не во всех. Роли имеют одно неприятное свойство: они быстро кончаются. ACL может содержать всего 60 с чем-то ролей.
[snapback]77661" rel="nofollow" target="_blank[/snapback]​
[/quote]
а именно 70 :)