2012-02-14 17 views
2

すべてのユーザーにフォーム(QCR)を作成させることはできますが、誰も私と他のユーザー以外のフォームを編集できないようにする必要があります。私はACLとAuthors and Readersのフィールドでうまくやっているが運がない。Lotus Notesフォームのアクセスを制限する

背景: 1.このフォームは、このQCRフォームの情報の一部がそのデータベースから継承されているため、別のデータベースからボタンをクリックすると作成されます。 2. Allグループのユーザーはこのフォームを作成できるはずです 3.ユーザーはQCRデータベース内のすべてのドキュメントを読むことはできますが、編集はできません 4.私と他の1人のユーザーが読むことができるはずですそして、すべての文書を編集 5.私が試してみました何の前と

を編集されている文書の後の値を比較するQuerySaveイベントでいくつかのコードがあります は、私は私と1人の他のユーザーを持つグループQCR_Accessを作成メンバーとして。次に、計算されたAuthorsフィールドを作成し、QCRフォームの式として 'QCR_Access'を指定しました。しかし、すべてのグループ(預金者または著者)に与えたアクセスタイプの種類にかかわらず、ALLグループのユーザーの1人でデータベースに新しい文書を保存しようとすると、アプリケーションでエラーが表示され続けます。

以下は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 

答えて

1

ここで著者のフィールドを必ず使用しなければならないと思いますが、あなたの説明は目的に合っています...私はこのケースで思考の役割を使用することをお勧めします。あなたは会社を離れる...

ACLが正しく設定されている場合は、作成者フィールド[role]に次のようなロールの値を追加するだけで済みます。あなたがそれを検査すれば、あなたのフィールドはどのように見えますか?

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

また、それ以外の場合は、あなたが式を作ることができる

+0

これは良い方法です。役割は、名前/グループが変更された場合(ACLのみ)、後でコードを変更する必要がないことを意味します。 –

0

私が正しく、次てる場合は、トラブルQCRフォームを保存したされているすべてのグループのメンバーは、正しい、QCR_Accessグループに含まれていないものがありますか?これは、QCRフォームの計算されたAuthorsフィールドがQCR_Access編集アクセスのみを許可するように設定されていることを考えると意味があります。

修正プログラムは、ユーザーが文書を保存した後にその文書の作成者フィールドを更新することです。より高い特権のユーザーアカウントで実行される何らかの種類のエージェントを使用してこれを行うことができます。また、リーダーフィールドを使用して、そのエージェントが実行されるまで、文書を作成したユーザーから文書を「隠す」こともできます。

これはしばらく経っていますが、私はこれに直面したときに、よりセキュリティの低いソリューションを選択したと思います。その場合、文書が新しくないときやユーザーが特定のグループに所属していないときの編集を防ぐことができます。 QueryOpenイベントとQueryModeChangeイベントを処理し、そこにロジックを配置する必要があります。注:これは実際のセキュリティではありません。著者と読者のフィールドは、ドキュメントのセキュリティを処理するために推奨される方法です。

希望すると便利です。

0

を動作しないでしょう、あなたは、著者のフィールドに名前を書く場合は、人々の完全修飾名を使用する必要があることを考えますあなたの作者のフィールドは次のようになります:

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

これには1つの問題があります。通常のユーザーが文書を作成して保存しても閉じずに、変更を試みてもう一度保存しようとすると、2回目の保存は失敗します。これを処理するには、ユーザーに預金者のアクセス権を与え、querySaveコードでDatabase.CurrentAccessLevelプロパティをチェックして、現在のユーザーに預金者のアクセス権があるかどうかを確認し、「保存してもよろしいですか?追加の変更を加えることができます。

0
  1. Dominoディレクトリに2つのACLグループ(例えば)を作成します。QCR_Creatorsに誰を入れ
    • QCR_Editors
    • QCR_Creators
  2. を、QCR_Editorsにちょうど自分自身と他のエディタを置きます。データベースのアクセス制御リスト(ACL)では
  3. :(。必要に応じて「文書を削除する」と)
    • は「編集者」のアクセスをQCR_Editorsを与える
    • はQCR_Creatorsに(「文書の作成」と「著者」のアクセス権を与えるだけ。)

注:フォームまたは文書に作者や読者フィールドを使用する必要はありません

  • クリエイターは、ドキュメントを保存する際に1つの機会があります。保存されると、それ以降の編集からロックアウトされます。

追加機能(完了するまで数回の保存を許可するなど)が必要な場合は、お知らせください。

- 助成

関連する問題