Как проверить, является ли пользователь редактором документа или нет?

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

fvoice

#1
хотел использовать @Authors, но эта функция не возвращает конкатенированного списка полей Authors..
какие еще способы есть?
 
F

fvoice

#3
хочу скрывать кнопку, котрая редактирует текущий документ.. т.к. используется DialogBox с временным документом, то информация о невозможности сохранить изменения выходят только при нажатии на кнопку сохранить в диалогбоксе..

как вариант, как на LS можно проверить может ли пользователь редактировать документ?
 
F

fvoice

#5
Для: wowa
вариант конечно.. но не очень оптимальный, т.к. колличество полей Authors может расшириться и тогда формула будет работать некорректно :unsure:
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#6
Для: fvoice
Вроде нет нормального способа.
Как вариант могу предложить создание временного документа(серверным агентом в момент открытия документа) с полями Readers, куда включить всех авторов. Потом, при попытке редактирования, смотреть этот документ. Если виден, то редактируем.
Потом эти временные документы удаляем.
 

wowa

Well-known member
01.02.2007
845
0
#7
Для: fvoice
я не сталкивался с таким что используют несколько полей авторсов
Зачем их несколько?
Чем плохо, что в одном поле содержится список пользователей которые могут редактировать док...
А даже если их и несколько, то:

!@Contains(@UserName; поле_авторсов1 : поле_авторсов2 : поле_авторсов3 ...... )
 

Omh

Lotus team
04.07.2007
2 210
1
#9
Код:
Forall x in doc.Items
if x.Type = AUTHORS then
'собираем авторов в array/list
end if
End forall

'Проверяем текущего юзера на наличие в array/list
 
F

fvoice

#10
Для: Omh
О, чуть-чуть по другому сделал:
Код:
Function MyIsEditor(doc As NotesDocument ) As Boolean 

Dim ws As New NotesUIWorkspace
Dim Authors As Variant 
Dim UserNamesList As Variant 
Dim i As Integer
Dim j As Integer

If ws.CurrentDatabase.Database.CurrentAccessLevel >3 Then
MyIsEditor = True
Exit Function
End If

UserNamesList = Evaluate({@UserNamesList},doc)
Authors = doc.Authors

Forall item In doc.Items
If item.IsAuthors Then
Authors = Fulltrim(Arrayunique(Arrayappend(Authors,item.Values)))
End If
End Forall

For i = 0 To Ubound(Authors)
For j = 0 To Ubound(UserNamesList)
If Authors(i) = UsernamesList(j) Then
MyIsEditor = True
Exit Function
End If
Next
Next
MyIsEditor = False

End Function
 

Omh

Lotus team
04.07.2007
2 210
1
#11
Arrayappend - кмк, не комильфо метод.
Я вообще не очень люблю этот метод, неизвестно, что он там внутри делает.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#12
А это? Ведь неправильно.
<!--QuoteBegin-fvoice+12:02:2008, 11:50 -->
<span class="vbquote">(fvoice @ 12:02:2008, 11:50 )</span><!--QuoteEBegin-->Authors = doc.Authors
[snapback]97703" rel="nofollow" target="_blank[/snapback]​
[/quote]

This property does not return the names of people who have permission to edit a document (as found in an item of type Authors). Therefore, the people returned by the Authors property and the people listed in an Authors item may differ.
 
F

fvoice

#14
Для: Omh
а как лучше писать? вручную добавлять?

Для: Medevic

ну да.. депозитор наверное может быть автором, а вот редактировать документ и не сможет.. или я не о том? ну в общем я понял.. написал чтобы Authors значения приобрел.
а что если модифицировать блок:
Код:
	Forall item In doc.Items
If item.IsAuthors Then
Authors = item.Values
Authors = Fulltrim(Arrayunique(Arrayappend(Authors,item.Values)))
End If
End Forall
а ту строчку удалить..
 

Omh

Lotus team
04.07.2007
2 210
1
#15
Для: fvoice
Я делал бы:
1. вручную ArrayGetIndex + Redim Preserve
(не лучший выход, но на небольших размерах массива работает быстро)
2. list as string

Но я не настаиваю, просто ArrayAppend меня не бодрит.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#17
<!--QuoteBegin-Constantin A Chervonenko+12:02:2008, 14:22 -->
<span class="vbquote">(Constantin A Chervonenko @ 12:02:2008, 14:22 )</span><!--QuoteEBegin-->Имейте в виду, что AUTHORS-поле будет содержать имя группы и/или роль, а не только имя юзера
[snapback]97763" rel="nofollow" target="_blank[/snapback]​
[/quote]
Вот поэтому я и использую специальные документы.
Т.е. есть какой-то настроечный документ, который разруливает различными правами. Пусть, например, видимость кнопки. При его сохранении создаются/изменяются спец. документы. Точнее в поля типа Readers записываются имена и группы. Потому по видимости этого документа легко определяем доступ.
Плюсы очевидны: минимум кода, удобно.
Минусы: есть ощущения, что что-то не так. :)
 
F

fvoice

#18
Для: Omh
Были ли прецеденты когда ArrayAppend подводил? У меня очень много действий строятся на этой функции, не хотелось бы иметь осложнений..
переписал код на:
Код:
	Forall item In doc.Items
If item.IsAuthors Then
Forall value In item.values
If Not value = "" Then
Redim Preserve Authors(Ubound(Authors)+1)
Authors(Ubound(Authors)-1) = value
End If
End Forall
End If
End Forall
имхо юзать ArrayAppend гораздо удобней :)
<!--QuoteBegin-Constantin A Chervonenko+12:02:2008, 17:22 -->
<span class="vbquote">(Constantin A Chervonenko @ 12:02:2008, 17:22 )</span><!--QuoteEBegin-->Имейте в виду, что AUTHORS-поле будет содержать имя группы и/или роль, а не только имя юзера
[snapback]97763" rel="nofollow" target="_blank[/snapback]​
[/quote]
вроде @UserNamesList возвращает полный список имен, групп и ролей пользователя относительно БД, в которой находится doc, передаваемый в Evaluate.

Для: Medevic
настроечный документ для каждого документа или для группы документов? а если для разных документов разный доступ, заранее не известный?
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#19
<!--QuoteBegin-fvoice+12:02:2008, 15:02 -->
<span class="vbquote">(fvoice @ 12:02:2008, 15:02 )</span><!--QuoteEBegin-->настроечный документ для каждого документа или для группы документов? а если для разных документов разный доступ, заранее не известный?
[snapback]97776" rel="nofollow" target="_blank[/snapback]​
[/quote]
Для групп. Но никто не мешает так делать для отдельных документов. Только база потолще будет, да и при очень большом количестве документов скорость сильнее упадет.
 

Omh

Lotus team
04.07.2007
2 210
1
#20
<!--QuoteBegin-fvoice+12:02:2008, 14:02 -->
<span class="vbquote">(fvoice @ 12:02:2008, 14:02 )</span><!--QuoteEBegin-->Были ли прецеденты когда ArrayAppend подводил?
[snapback]97776" rel="nofollow" target="_blank[/snapback]​
[/quote]
Не было, т.к. не юзаю.
Но где-то читал нечто нелицепиятное о ней, хотя бы тут