You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

是否可为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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.17 14:05:30