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

Тема в разделе "Lotus - Программирование", создана пользователем Yarotskaya, 14 июл 2010.

Статус темы:
Закрыта.
  1. Yarotskaya

    Yarotskaya Гость

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

    leiba Lotus team
    Lotus team

    Регистрация:
    18 июн 2010
    Сообщения:
    47
    Симпатии:
    0
    Для защиты от удаления используйте Database Script, событие Querydocumentdelete.
    Для защиты от открытия в режиме редактирования используйте события Querymodechange и Queryopen формы. Queryopen для не нового документа для защиты от открытия из вида сразу на редактирование по Ctrl+E.
    Вот похожий пример из Help про Querymodechange.

    Код (LotusScript):
    '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
    вот аналогичный пример

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

    duchan Well-Known Member

    Регистрация:
    20 сен 2006
    Сообщения:
    105
    Симпатии:
    2
    А обязательно код? ACL - это единственное правильное решение, все скриптовые методы обходятся (если уметь).
    Запретить уделение всем кроме админа. Если же необходимо, что бы пользователи при каких-то условиях могли удалять док-ты, то реализуйте не удаление, а выставление некоего флага (в какое-либо поле пишите что-либо и по этому полю\значению определяйте в логике программы что док-т удален), а реальное удаление пусть производит некий агент по расписанию (ночью) и при этом лучше что бы это было Soft удаление (мягкое удаление), настойте базу на SoftDeletion сделайте вид для удаленных и если что там сможете найти дак-т, или же другой способ - перенос док-та в другую базу где так же по прошествии некоего времени удалять.
    Для упращения администрирования прав смотрите так же в сторону ролей и груп.

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Зачем засорять инишку? Достаточно объявить Public переменную в разделе Globals формы. В кнопке Правка присваиваем ей True, в QueryModeChange присваиваем её значение параметру Cancel, а ей самой — False.
     
  5. Darker

    Darker Гость

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

    nvyush Lotus team
    Lotus team

    Регистрация:
    22 апр 2009
    Сообщения:
    2.317
    Симпатии:
    0
    Globals бывает разный ;). Если объявить глобальную переменную i в Globals корневой библиотеки (которую используют все другие), то можно нарваться на очень интересные эфекты ;). Согласен, что глобальными переменными злоупотр*цензура*ть не следует. Сам объявляю только ThisDB, ThisSession в Globals корневой библиотеки (инициализируются в Initialize), ThisUIDoc, ThisDoc, AllowSetEdit в Globals формы (инициализируются в PostOpen), ThisUIView, ThisView в Globals представления (инициализируются в QueryOpen).
     
  7. Cleric-Lviv

    Cleric-Lviv Lotus team
    Lotus team

    Регистрация:
    3 янв 2008
    Сообщения:
    605
    Симпатии:
    0
    Мама мия......
    ACL вам в помощь от удаления.
    о редактировании: как говорил мне Akupaka Help читать нуна ;)

    Код (LotusScript):
    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
     
  8. alik86

    alik86 Lotus team
    Lotus team

    Регистрация:
    20 ноя 2008
    Сообщения:
    465
    Симпатии:
    0
    +1 к ACL. :)
    Если возможность удаления/неудаления/редактирования/нередактирования относится ко всем документам, а не лишь к некоторым (например в зависимости от их статуса), то нечего лезть в дебри.
     
Загрузка...
Статус темы:
Закрыта.

Поделиться этой страницей