注意:此功能仅在夜间版(v16)中可用。此功能被视为实验性功能。
在 Frappe 框架中,可以使用权限级别来控制字段的可见性。
然而,在许多业务场景中,显示某些字段但同时隐藏其敏感数据非常重要。例如:
- 人力资源用户可能需要查看员工详细信息,但不应看到薪资数额。
- 支持人员可能会看到以掩码格式显示的客户电话号码,如
811XXXXXXX。 - 财务用户可以查看银行账户字段,而无需暴露完整的账号。
这就是数据掩码的作用所在。
使用数据掩码,您可以根据用户的角色和权限配置特定字段以显示掩码或隐藏的值——而无需限制字段的可见性。
它确保敏感信息得到保护,同时保持用户界面的一致性和信息丰富性。
启用数据掩码
可以直接从 DocType 或通过自定义表单启用数据掩码。
启用数据掩码的步骤
- 打开要启用掩码的 DocType(在开发者模式下)或自定义表单。
- 选择要掩码的字段。
- 勾选“掩码”复选框。
- 保存并重新加载表单。
启用后,没有该字段“掩码”权限的用户将看到掩码或隐藏的数据,而具有相应权限的用户将看到实际值。
以下是一个快速演示,展示如何启用数据掩码:
支持的字段类型
数据掩码只能应用于以下字段类型:
Select、Read Only、Phone、Percent、Password、Link、Int、Float、Dynamic Link、Duration、Datetime、Currency、Data 和 Date。
面向开发者
Frappe 框架中的数据掩码与现有的权限系统无缝协作。
当用户对某个字段没有所需的“掩码”权限时,框架会自动在用户界面和后端响应中将实际值替换为掩码版本。
内部工作原理
-
字段配置
每个字段都可以在其 DocField 中启用mask属性。{ "fieldname": "phone_number", "fieldtype": "Data", "options": "Phone", "mask": 1 } -
权限检查
系统使用以下方法检查当前用户是否具有该字段的mask权限:meta.has_permlevel_access_to(fieldname=df.fieldname, df=df, permission_type="mask") -
响应中的自动掩码
一旦权限检查失败,框架会在返回字段值之前自动对其进行掩码处理。
这适用于:- 表单视图数据加载
- 列表视图查询
- 使用 ORM 或标准数据获取的报表
- API 响应(例如
/api/resource/...、/api/method/...)
注意:数据掩码不会自动应用于使用原始 SQL 的自定义 SQL 查询或查询报表。
在这种情况下,开发者需要在返回响应之前,在查询结果中显式应用掩码逻辑。