限制Lotus Notes表单中的访问权限

时间:2012-02-14 20:36:08

标签: lotus-notes lotusscript

我希望能够让所有用户创建表单(QCR),但除了我和另外一个用户之外,没有人能够编辑表单。我一直在修改ACL和作者和读者领域,但没有运气。

更多背景资料: 1.通过单击单独数据库中的按钮创建此表单,因为此QCR表单中的某些信息是从该数据库继承的。 2. All组中的用户应该能够创建此表单 3.用户应该能够读取QCR数据库中的所有文档,但不能编辑它们 4.我和其他一个用户应该能够阅读和编辑所有文件 5. QuerySave事件中有一些代码用于比较编辑文档之前和之后的值

我尝试过: 我创建了一个QCR_Access组,其中包含我和另外一个用户作为成员。然后我创建了一个计算的作者字段,其中“QCR_Access”作为QCR表格中的公式。但是无论我给All组(存款人或作者)提供什么类型的Access类型,每当我尝试使用ALL组中的一个用户在数据库中保存新文档时,应用程序就会一直给我错误。

以下是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 个答案:

答案 0 :(得分:1)

我认为你肯定必须在这里使用作者字段,你的描述完全符合目的......我建议你在这种情况下使用一个角色,因为这样你可以在紧急情况下将它分配给其他人或者如果你离开公司......

如果ACL设置正确,您只需要在作者字段中添加这样的角色值“[role]”我附加了一个图像链接,该图像显示了如果您的字段应该如何显示检查它。

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

另外,请考虑如果您为作者字段写名称,则需要使用人员的完全限定名称,否则无法使用

答案 1 :(得分:0)

如果我正确关注,那么在保存QCR表单时遇到问题的ALL组成员是不在QCR_Access组中的成员,对吗?鉴于QCR表单上的计算作者字段设置为仅允许QCR_Access编辑访问,这是有意义的。

然后,修复将是在用户保存后更新该文档的作者字段。您可以使用在较高权限的用户帐户下运行的某种代理来执行此操作。您也可以使用reader字段“隐藏”创建它的用户的文档,直到该代理程序运行为止。

已经有一段时间了,但我认为我在面对此时选择了安全性较低的解决方案,主要是使用表单事件来阻止编辑。在这种情况下,您可以在文档不是新文件时以及当用户不在某个组中时阻止编辑。您必须处理QueryOpen和QueryModeChange事件并将逻辑放在那里。注意:这不是真正的安全性。作者和读者字段是处理文档安全性的推荐方法。

希望这有帮助!

答案 2 :(得分:0)

您可以使作者字段的公式如下所示:

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

然而,这有一个问题。如果普通用户创建文档,保存它但不关闭它,然后尝试进行更改并再次保存,第二次保存将失败。为了解决这个问题,您可以为用户提供存储者访问权限,并让您的querySave代码检查Database.CurrentAccessLevel属性,以查看当前用户是否具有存款者访问权限并提示用户询问“您确定要保存吗?您不会能够做出额外的改变。“

答案 3 :(得分:0)

  1. 在Domino目录中创建两个ACL组(例如):
    • QCR_Editors
    • QCR_Creators
  2. 将每个人都放入QCR_Creators,将自己和另一个编辑器放入QCR_Editors。
  3. 在数据库访问控制列表(ACL)中:
    • 授予QCR_Editors“编辑”权限(如果需要,可以使用“删除文档”。)
    • 授予QCR_Creators“作者”访问权限(仅限“创建文档”。)
  4. 注意:

    • 您无需在表单或文档上使用作者或读者字段。
    • 创作者只有一个机会来保存文档。保存后,它们将无法进行进一步编辑。

    如果您需要其他功能(例如在完成之前允许多次保存),请告诉我。

    - 格兰特