свойства базы

  • Автор темы Yarotskaya
  • Дата начала
Статус
Закрыто для дальнейших ответов.
Y

Yarotskaya

#1
Пожалуйста помогите написать код на LotusScript для запрета удаления документа (или нескольких документов сразу) по кнопке Del пользователями, у которых нет прав администратора, а также запрет для таких пользователей переход в режим редактирования по двойному клику.
 

leiba

Lotus team
18.06.2010
47
0
#2
Для защиты от удаления используйте Database Script, событие Querydocumentdelete.
Для защиты от открытия в режиме редактирования используйте события Querymodechange и Queryopen формы. Queryopen для не нового документа для защиты от открытия из вида сразу на редактирование по Ctrl+E.
Вот похожий пример из Help про Querymodechange.

Код:
'This script checks whether the user is switching from Read mode to Edit mode. 
'If so, and if the Status field reads "Closed," the script displays a message and prevents the user
'from switching to Edit mode.

Sub Querymodechange(Source As Notesuidocument, _
Continue As Variant)
If Not ( source.EditMode ) Then
currentStatus = source.FieldGetText( "Status" )
If ( currentStatus = "Closed" ) Then
Messagebox _
( "Document available for browsing only." )
continue = False
End If
End If
End Sub
пользователями, у которых нет прав администратора
если речь о специальной роли, то в условии можно использовать Evaluate({@UserRoles})
если же речь об уровне доступа, то можно использовать свойство CurrentAccessLevel класса NotesDatebase
вот аналогичный пример

Код:
If (db.CurrentAccessLevel<5) Then
Messagebox "Для работы с настройками базы Вам необходимы права доступа не ниже Дизайнера.", 48, "Информация"
Exit Sub
End If
 

duchan

Well-known member
20.09.2006
110
3
#3
А обязательно код? ACL - это единственное правильное решение, все скриптовые методы обходятся (если уметь).
Запретить уделение всем кроме админа. Если же необходимо, что бы пользователи при каких-то условиях могли удалять док-ты, то реализуйте не удаление, а выставление некоего флага (в какое-либо поле пишите что-либо и по этому полю\значению определяйте в логике программы что док-т удален), а реальное удаление пусть производит некий агент по расписанию (ночью) и при этом лучше что бы это было Soft удаление (мягкое удаление), настойте базу на SoftDeletion сделайте вид для удаленных и если что там сможете найти дак-т, или же другой способ - перенос док-та в другую базу где так же по прошествии некоего времени удалять.
Для упращения администрирования прав смотрите так же в сторону ролей и груп.

Что бы пользователи не могли править док-ты используйте права доступа к базе (ACL) Автор и в документах прописывайте поля с типом Author...
Если необходимо ТОЛЬКО двойной клик обрезать, а по кнопке переводить в режим правки - то тут "в лоб" не получится, leiba уже описал основные принципы по блокированию открытия на правку через события формы. Добавте в форму кнопку "Править" в которой, помимо перевода в режим правки документа, стоит прописывание некоего флага, например в нотес.ини, и на событии формы анализировать этот флаг (не забутьте его там очистить...)
 

nvyush

Lotus team
22.04.2009
2 317
0
#4
Добавте в форму кнопку "Править" в которой, помимо перевода в режим правки документа, стоит прописывание некоего флага, например в нотес.ини, и на событии формы анализировать этот флаг (не забутьте его там очистить...)
Зачем засорять инишку? Достаточно объявить Public переменную в разделе Globals формы. В кнопке Правка присваиваем ей True, в QueryModeChange присваиваем её значение параметру Cancel, а ей самой — False.
 
D

Darker

#5
nvy
Помню на этом форуме старожилы меня чуть было не закидали, когда я завел речь о Globals))
 

nvyush

Lotus team
22.04.2009
2 317
0
#6
nvy
Помню на этом форуме старожилы меня чуть было не закидали, когда я завел речь о Globals))
Globals бывает разный ;). Если объявить глобальную переменную i в Globals корневой библиотеки (которую используют все другие), то можно нарваться на очень интересные эфекты ;). Согласен, что глобальными переменными злоупотр*цензура*ть не следует. Сам объявляю только ThisDB, ThisSession в Globals корневой библиотеки (инициализируются в Initialize), ThisUIDoc, ThisDoc, AllowSetEdit в Globals формы (инициализируются в PostOpen), ThisUIView, ThisView в Globals представления (инициализируются в QueryOpen).
 

Cleric-Lviv

Lotus team
03.01.2008
600
0
#7
Мама мия......
ACL вам в помощь от удаления.
о редактировании: как говорил мне Akupaka Help читать нуна ;)

Код:
Sub Postopen(Source As Notesuidocument)
'Let document pass if new or not in EditMode
'Otherwise if existing document is in EditMode
' Set allowEdit so Querymodechange doesn't reprocess
' Turn EditMode off so document opens in Read mode
' Tell the user to use the action
If source.EditMode And Not source.IsNewDoc Then
allowEdit = True
source.EditMode = False
Messagebox _
"Use Edit mode action to edit document"
Else
allowEdit = False
End If
End Sub


Sub Querymodechange(Source As Notesuidocument, Continue As Variant)
'Allow user to proceed, and turn off allowEdit if
' user clicked the action (allowEdit on)
' already processed by Postopen (allowEdit on)
' trying to get out of Edit mode
' (allowEdit off but EditMode on)
'Tell user to click action if changing existing document
' to Edit mode and not already processed by Postopen
' (allowEdit and EditMode off)
If allowEdit Or (source.EditMode And Not allowEdit) Then
allowEdit = False
Else
Messagebox _
"Use Edit mode action to edit document"
continue = False
End If
End Sub


Declarations

Dim allowEdit As Variant


Sub Click(Source As Button)
Dim workspace As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Set uidoc = workspace.CurrentDocument
'Turn on allowEdit so Querymodechange will let it pass
'Turn on EditMode
allowEdit = True
uidoc.EditMode = True
End Sub
 

alik86

Lotus team
20.11.2008
465
1
#8
+1 к ACL. :)
Если возможность удаления/неудаления/редактирования/нередактирования относится ко всем документам, а не лишь к некоторым (например в зависимости от их статуса), то нечего лезть в дебри.
 
Статус
Закрыто для дальнейших ответов.