Ограничение доступа в форме Lotus Notes - PullRequest
2 голосов
/ 15 февраля 2012

Я хотел бы иметь возможность разрешить всем пользователям создавать форму (QCR), но тогда никто не сможет редактировать форму, кроме меня и еще одного пользователя.Я возился с полем ACL и авторами и читателями, но мне не повезло.

Еще немного предыстории: 1. Эта форма создается путем нажатия кнопки из отдельной базы данных, поскольку часть информации в этом QCRФорма наследуется от этой базы данных.2. Пользователи в группе «Все» должны иметь возможность создавать эту форму. 3. Пользователи должны иметь возможность читать все документы в базе данных QCR, но не редактировать их. 4. Я и еще один пользователь должны иметь возможность читать и редактировать вседокументы 5. В событии QuerySave есть несколько кодов для сравнения значения до и после редактирования документов

Что я пробовал: я создал группу QCR_Access, в которой я и еще один пользователь являлись членами.Затем я создал вычисляемое поле «Авторы», используя «QCR_Access» в качестве формулы в форме QCR.Но независимо от того, какой тип доступа я предоставил группе «Все» («Депонент» или «Автор»), приложение постоянно выдает ошибку, когда я пытаюсь сохранить новый документ в базе данных с одним из пользователей из группы «ВСЕ».

Ниже приведены коды в Querysave, которые могут помочь вам понять, что я делаю.

Sub Querysave(Source As Notesuidocument, Continue As Variant)
' Compare the values in the form after it is saved with its original values when the document is not a new document.    
Dim doc As NotesDocument
Set doc = Source.Document

Dim session As New NotesSession
Dim user As String
user = session.CommonUserName

If newDoc Then
    doc.Log_Date = Cstr(Now())
    doc.Log_User = user
    doc.Log_Actions = "New document created."
Else        
    ' Load fields value to the array
    lastValues(0) = doc.QCR_Requestor(0)
    lastValues(1) = doc.QCR_No(0)
    ...
    lastValues(31) = doc.QCR_Tracking_Info(0)

' Compared each value in the array to see if there is any difference
    Dim i As Integer
    For i = 0 To 31
        If lastValues(i) <> originalValues(i) Then              
            Call UpdateLogFields(doc,user,i)
        End If
    Next
End If
End Sub

Sub UpdateLogFields (doc As NotesDocument, user As String, i As Integer)
Dim logDate As NotesItem
Dim logUser As NotesItem
Dim logActions As NotesItem

Set logDate = doc.GetFirstItem("Log_Date")
Set logUser = doc.GetFirstItem("Log_User")
Set logActions = doc.GetFirstItem("Log_Actions")

' a space is needed otherwise the appended text is right next to the border

Call logDate.AppendToTextList(" " & Cstr(Now()))
Call logUser.AppendToTextList(" " & user)

Select Case i
Case 0: Call logActions.AppendToTextList(" Requestor is changed.") 
Case 1: Call logActions.AppendToTextList(" QCR No is changed.")
    ...
  Case 30: Call logActions.AppendToTextList(" Follow Up information is changed.") 
Case 31: Call logActions.AppendToTextList(" Tracking information is changed.") 
End Select
End Sub

Ответы [ 4 ]

1 голос
/ 15 февраля 2012

Я думаю, что вы обязательно должны использовать поле авторов здесь, ваше описание точно соответствует цели ... Я бы порекомендовал вам использовать роль в этом случае, потому что таким образом вы можете назначить ее кому-то другому в чрезвычайных ситуациях или если вы покинуть компанию ...

Если ваш ACL настроен правильно, вам нужно только добавить значение роли, подобной этой, в поле ваших авторов "[роль]". Я приложил ссылку с изображением, которое показывает, как должно выглядеть ваше поле, если вы осмотреть его.

http://bp1.blogger.com/T-j3ZLqfNQ/RsQXnWk20uI/AAAAAAAAAic/RBRJdD-wVs4/s1600-h/0.gif

Кроме того, учтите, что если вы пишете имена в поле авторов, вам нужно использовать полное имя людей, иначе это не сработает

0 голосов
/ 29 февраля 2012
  1. Создайте две группы ACL в каталоге Domino (например):
    • QCR_Editors
    • QCR_Creators
  2. Поместите всех в QCR_Creators, поместитетолько вы и другой редактор в QCR_Editors.
  3. В списке управления доступом к базе данных (ACL):
    • Предоставьте QCR_Editors "Editor" доступ (с помощью "Удалить документы", если необходимо.)
    • Предоставьте QCR_Creators доступ "Автор" (только с "Создание документов").

Примечание:

  • Вам не нужноиспользуйте поля «Авторы» или «Читатели» в форме или документах.
  • Создатели будут иметь только одну возможность сохранить документ.После сохранения они будут заблокированы для дальнейших изменений.

Если вам нужны дополнительные функции (например, разрешение нескольких сохранений до завершения), дайте мне знать.

- Предоставить

0 голосов
/ 15 февраля 2012

Вы можете сделать так, чтобы формула для поля ваших авторов выглядела так:

@If(@IsNewDoc;"All";"QCR_Access");

Однако здесь есть одна проблема. Если обычный пользователь создает документ, сохраняет его, но не закрывает, а затем пытается внести изменения и сохранить его снова, второе сохранение завершится неудачно. Чтобы справиться с этим, вы могли бы предоставить пользователям Депозитор доступ и, имея свой код querySave, проверить свойство Database.CurrentAccessLevel, чтобы узнать, имеет ли текущий пользователь доступ к Депозитору, и предложить пользователю спросить: «Вы уверены, что хотите сохранить? иметь возможность вносить дополнительные изменения. "

0 голосов
/ 15 февраля 2012

Если я правильно понимаю, члены группы ALL, у которых возникли проблемы с сохранением формы QCR, не являются ли они членами группы QCR_Access, верно?Это имело бы смысл, если учесть, что вычисляемое поле «Авторы» в форме QCR настроено так, чтобы разрешать только доступ к редактированию QCR_Access.

Тогда исправление будет заключаться в обновлении поля автора этого документа после его сохранения пользователем.Вы можете сделать это с каким-то агентом, работающим под учетной записью с более высоким уровнем привилегий.Вы также можете, возможно, «скрыть» документ от пользователя, который его создает, до тех пор, пока этот агент не запустится, используя поле считывателя.

Это было давно, но я думаю, что выбрал решение с более низким уровнем безопасности, когда столкнулсяэто, по существу, использование событий формы для предотвращения редактирования.В этом случае вы можете запретить редактирование, когда документ не новый, а пользователь не входит в определенную группу.Вы должны обработать события QueryOpen и QueryModeChange и поместить туда логику.ПРИМЕЧАНИЕ: это не настоящая безопасность.Поля «Авторы» и «Читатели» рекомендуются для обеспечения безопасности документа.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...