Instead of setting values in a field in your documents table--which then affects all users accessing the documents table. Build a return separated list of values in a global field or variable. Since the values in the global field or variable will be specific to each user, their choices won't interfere with each other. Conditional formatting or a "hide object when" setting on a layout object can show which document is selected for a current user.
The script to add/remove a document from such a list can look like this:
IF [ IsEmpty (FilterValues ( $$SelectedList ; Documents::__pkDocumentID ) ) // Document is not yet selected, select it ]
Set Variable [$$SelectedList ; value: List ( $$SelectedList ; Documents::__pkDocumentID ) ]
#Document is already selected, de-select it
Set Variable [$$SelectedList ; Value: Substitute ( ¶ & $$SelectedList & ¶ ; ¶ & Documents::__pkDocumentID & ¶ ; ¶ ) ]
#Keep excess ¶ characters from "building up" in this variable
Set Variable [$$SelectedList ; Value: Middle ( $$SelectedList ; 2 ; Length ( $$SelectedList ) - 2 ) ]
This technique is adapted from an example to be found in "Adventures In FileMaking #2" (forthcoming in a day or two) where it is used to implement a "check box field with a scroll bar".