是否可为Lotus Notes文档添加"no-readers"字段以隐藏特定用户?
在Lotus Notes/Domino中实现文档的指定用户隐藏功能
Lotus Notes/Domino官方没有公开的「反向Readers字段」(即直接指定不可查看文档的用户),但可以通过以下几种方式实现类似需求,且无需大幅改动现有数据库权限设置:
利用Readers字段间接实现
给投诉类文档添加计算型Readers字段,通过公式逻辑排除特定涉事用户。核心思路是让Readers字段包含所有有权限查看的用户/组,仅剔除涉事人员。
示例Formula公式:@If(@IsMember(涉事人员字段名; @UserName); ""; @UserNamesList)若数据库依赖权限组管理,也可以直接指定允许查看的组集合,再排除涉事人:
@SetUnion( {"HR-授权组1"; "HR-授权组2"}; @If(@IsMember(涉事人员字段名; @UserName); ""; "") )注意:要确保@UserNamesList能正确获取当前用户的所有权限身份,避免遗漏合法查看者。
视图级隐藏控制
若不想修改文档结构,可在视图的选择公式中添加过滤逻辑,让涉事用户在视图中看不到目标文档:@Not(@IsMember(涉事人员字段名; @UserName))这种方式的局限性是:如果用户通过直接文档链接、搜索结果打开文档,视图过滤会失效,需结合文档级控制使用。
后台代理动态生成Readers字段
编写LotusScript代理,在投诉文档创建或更新时,自动遍历数据库ACL权限列表,排除涉事人员后生成Readers字段。示例代码片段:Dim session As New NotesSession Dim db As NotesDatabase Dim doc As NotesDocument Dim acl As NotesACL Dim entry As NotesACLEntry Dim readersItem As NotesItem Set db = session.CurrentDatabase Set doc = session.DocumentContext Set acl = db.ACL Set readersItem = doc.ReplaceItemValue("Readers", "") ' 遍历ACL,收集所有授权查看的用户/组(排除涉事人) Set entry = acl.GetFirstEntry() Do Until entry Is Nothing ' 仅保留权限级别>=作者的条目,且排除涉事人员 If entry.Level >= ACLLEVEL_AUTHOR And entry.Name <> doc.涉事人员字段名(0) Then Call readersItem.AppendToTextList(entry.Name) End If Set entry = acl.GetNextEntry(entry) Loop Call doc.Save(True, False)
注意事项
- 测试时要覆盖所有访问路径:视图浏览、直接链接打开、全文搜索结果,确保涉事用户无法通过任何途径查看目标文档。
- 若数据库有大量授权用户,建议用权限组代替单个用户添加到Readers字段,避免字段内容过长影响性能。
内容的提问来源于stack exchange,提问作者Matt Smith
相关产品推荐
相关产品推荐

