数据脱敏

注意:此功能仅在夜间版(v16)中可用。此功能被视为实验性功能。

在 Frappe 框架中,可以使用权限级别来控制字段的可见性。

然而,在许多业务场景中,显示某些字段但同时隐藏其敏感数据非常重要。例如:

  • 人力资源用户可能需要查看员工详细信息,但不应看到薪资数额。
  • 支持人员可能会看到以掩码格式显示的客户电话号码,如 811XXXXXXX
  • 财务用户可以查看银行账户字段,而无需暴露完整的账号。

这就是数据掩码的作用所在。

使用数据掩码,您可以根据用户的角色和权限配置特定字段以显示掩码或隐藏的值——而无需限制字段的可见性。
它确保敏感信息得到保护,同时保持用户界面的一致性和信息丰富性。

启用数据掩码

可以直接从 DocType 或通过自定义表单启用数据掩码。

启用数据掩码的步骤

  1. 打开要启用掩码的 DocType(在开发者模式下)或自定义表单。
  2. 选择要掩码的字段。
  3. 勾选“掩码”复选框。
  4. 保存并重新加载表单。

启用后,没有该字段“掩码”权限的用户将看到掩码或隐藏的数据,而具有相应权限的用户将看到实际值。

以下是一个快速演示,展示如何启用数据掩码:

支持的字段类型

数据掩码只能应用于以下字段类型:

SelectRead OnlyPhonePercentPasswordLinkIntFloat
Dynamic LinkDurationDatetimeCurrencyDataDate

面向开发者

Frappe 框架中的数据掩码与现有的权限系统无缝协作。
当用户对某个字段没有所需的“掩码”权限时,框架会自动在用户界面和后端响应中将实际值替换为掩码版本。

内部工作原理

  1. 字段配置
    每个字段都可以在其 DocField 中启用 mask 属性。

    {
        "fieldname": "phone_number",
        "fieldtype": "Data",
        "options": "Phone",
        "mask": 1
    }
    
  2. 权限检查
    系统使用以下方法检查当前用户是否具有该字段的 mask 权限:

    meta.has_permlevel_access_to(fieldname=df.fieldname, df=df, permission_type="mask")
    
  3. 响应中的自动掩码
    一旦权限检查失败,框架会在返回字段值之前自动对其进行掩码处理。
    这适用于:

    • 表单视图数据加载
    • 列表视图查询
    • 使用 ORM 或标准数据获取的报表
    • API 响应(例如 /api/resource/.../api/method/...

注意:数据掩码不会自动应用于使用原始 SQL 的自定义 SQL 查询或查询报表。
在这种情况下,开发者需要在返回响应之前,在查询结果中显式应用掩码逻辑。