设置双重身份验证(v17+)

双重身份验证(2FA)为登录增加了一个额外步骤。用户输入密码后,还必须输入验证码。验证码来自身份验证器应用、短信或电子邮件。

本页介绍版本 17 及更高版本。

1. 启用双重身份验证

  1. 转到系统设置 > 登录选项卡 > 双重身份验证部分。
  2. 勾选启用双重身份验证。
  3. 在双重身份验证方式中,选择以下方式之一:
  • “OTP 应用”:用户从身份验证器应用获取验证码,例如 Google Authenticator、Microsoft Authenticator 或 1Password。验证码每 30 秒更换一次(TOTP)。
  • “短信”:用户通过短信获取验证码。
  • “电子邮件”:用户通过电子邮件获取验证码。
  1. 在OTP 签发方名称中,输入用户在身份验证器应用中看到的名称,例如“My Company ERP”。
  2. 如果选择了“短信”,可以在OTP 短信模板中更改短信内容。使用 {{ otp }} 作为验证码的占位符。
  3. 保存。

2. 设置验证码发送方式

每种方式都需要以下设置之一:

  • OTP 应用和电子邮件:设置一个外发电子邮件账户。使用“OTP 应用”时,首次登录会通过电子邮件发送验证码。用户必须先输入此验证码,才能设置应用。
  • 短信:设置短信设置。如果没有短信网关 URL,则无法保存“短信”方式。

3. 选择使用 2FA 的角色

启用 2FA 时,系统会为“全部”角色开启双重身份验证。届时所有用户都必须输入验证码,包括管理员。

如果只想让部分用户使用 2FA:

  1. 打开角色“全部”,取消勾选双重身份验证。
  2. 打开每个必须使用 2FA 的角色(例如“系统管理员”),勾选双重身份验证。

如果用户的某个或多个角色勾选了双重身份验证,则该用户必须输入验证码。

2FA 不适用于使用 API 密钥和 API 密钥密码的 API 请求。

4. 可选:限制 IP 地址

可以在用户上设置限制 IP,仅允许从特定 IP 地址登录。系统设置中的两个设置控制其与 2FA 的配合方式:

  • 对从受限 IP 地址登录的用户跳过双重身份验证:从受限 IP 地址登录的用户无需输入验证码。
  • 启用双重身份验证时跳过受限 IP 地址检查:用户使用 2FA 时可以从任意 IP 地址登录。也可以在用户表单中为单个用户设置此项。

使用 OTP 应用首次登录

首次登录时,用户在登录界面设置身份验证器应用。

  1. 输入用户名和密码,然后点击登录。
  2. 系统会向您的电子邮件地址发送验证码。在验证码中输入此验证码,然后点击验证。此步骤确保只有该电子邮件地址的所有者才能设置应用。
  3. 登录界面会显示一个二维码。打开身份验证器应用并扫描二维码。如果无法扫描,请在应用中手动添加账户,并输入二维码下方显示的设置密钥。
  4. 应用会显示一个 6 位验证码。在验证码中输入此验证码,然后点击验证。

必须在 5 分钟内完成这些步骤。如果超时,请刷新页面并重新登录。

二维码只显示一次。后续登录时,只需输入身份验证器应用中的验证码。

使用短信或电子邮件登录

  1. 输入用户名和密码,然后点击登录。
  2. 系统会向您的手机号码或电子邮件地址发送验证码。
  3. 在验证码中输入验证码,然后点击验证。

验证码有效期为 5 分钟。

丢失设备或更换新设备

如果用户丢失了手机或想使用其他身份验证器应用,请重置其 OTP 密钥:

  1. 打开用户。
  2. 点击密码 > 重置 OTP 密钥。

系统会向用户发送电子邮件,告知其重置情况。下次登录时,用户需按照“使用 OTP 应用首次登录”中所述重新设置身份验证器应用。

用户也可以在自己的用户表单中重置自己的 OTP 密钥。系统管理员可以为所有用户重置。

从版本 16 升级

  • 设置链接电子邮件和 /qrcode 页面已不存在。旧电子邮件中的设置链接将无法使用。未完成设置的用户将在下次登录时在登录界面完成设置。
  • 设置二维码图片页面过期时间已不存在。
  • 升级会从Home/Barcodes文件夹中删除旧的二维码图片。这些图片包含用户的 OTP 密钥。
  • 已经设置好身份验证器应用的用户无需进行任何操作。
  • 常见问题

    我已设置 OTP 应用,但无法登录

    应用生成的验证码取决于您设备上的时间。请确保您设备上的时间准确并已自动同步。与服务器时间相差超过 30 秒可能导致验证码无效。

    我没有收到包含验证码的邮件

    请确保外发电子邮件账户工作正常,并检查您的垃圾邮件文件夹。如果验证码已过期,请刷新页面并重新登录以获取新的验证码。

    项目、客户和供应商的公司限制

    公司限制功能可以将物料、客户或供应商限制在指定的公司范围内。被限制的记录只能在你列出的公司中使用。ERPNext 会在其他所有公司中阻止该记录的使用。

    在多公司站点中,如果某个主数据只属于一家公司,就可以使用此功能。例如,某个产品只有一家公司销售,或者某个供应商只有一家公司向其采购。

    字段说明

    物料、客户和供应商的公司限制部分包含两个字段。

    字段 类型 说明
    限制到公司 复选框 为此记录开启限制。
    允许的公司 表格多选 可以使用此记录的公司。

    勾选限制到公司后,允许的公司为必填项。如果取消勾选,ERPNext 会清空该列表。

    谁可以更改限制

    该部分位于权限级别 1。只有以下角色可以读取和写入这两个字段。

    单据 角色
    物料 物料管理员
    客户 销售主数据管理员
    供应商 采购主数据管理员

    其他用户看不到该部分。如果其他用户保存了记录,ERPNext 会保留原有的限制值。

    限制一条记录

    1. 打开物料、客户或供应商。
    2. 找到公司限制部分。
    3. 勾选限制到公司。
    4. 在允许的公司中添加一个或多个公司。
    5. 保存记录。

    允许的公司字段只显示你可以访问的公司。如果你对公司有用户权限,则无法添加或移除该权限范围之外的公司。

    限制的作用

    交易

    当你保存带有公司字段的单据时,ERPNext 会检查限制。检查会读取单据及其子表中所有指向物料、客户或供应商的链接。如果被链接的记录受到限制,且单据的公司不在允许列表中,保存会失败并显示以下消息:

    由于公司限制,物料 ITEM-0001 无法与公司 Wind Power LLC 一起使用

    该检查覆盖所有交易,例如销售订单、采购发票、库存条目和物料申请。它也覆盖带有公司字段的主数据,例如物料清单和定价规则。

    往来方选择

    当你在交易中选择受限制的客户或供应商时,ERPNext 在获取往来方详细信息时会抛出相同的错误。你无需保存单据就能看到该错误。

    销售和采购交易中的物料、客户和供应商搜索会发送单据的公司信息。这些搜索会隐藏该公司无法使用的记录。不发送公司信息的搜索会显示所有记录。保存时的检查仍会阻止错误的记录。

    列表视图和报表

    只有当用户对公司有用户权限时,列表视图过滤才会生效。此类用户只能看到允许列表中包含其被许可公司的受限制物料、客户或供应商。该用户也无法打开被许可公司之外的受限制记录。

    没有公司用户权限的用户可以看到列表中的所有记录。交易检查仍然对该用户生效。

    限制条件

    • 检查在保存时运行。已提交的单据在你更改限制后仍然有效。你仍然可以取消该单据。
    • 修订后的单据会再次运行检查。如果限制现在阻止了该公司,修订会失败。
    • 限制不会禁用记录。记录在其允许的公司中保持活跃。

    消息

    消息 原因 操作
    勾选限制到公司时,允许的公司为必填项 复选框已开启且列表为空。 添加至少一个公司,或取消勾选。
    由于公司限制,<doctype> <name></name></doctype> 无法与公司 <company></company> 一起使用 该文档使用了公司中不允许使用的受限记录。 从文档中移除该记录,或将该公司添加到允许的公司中。
    您无权在允许的公司中添加或移除公司 <company></company> 您在公司上的用户权限不涵盖该公司。 请让管理员更改列表。

    权限级别

    权限级别(Perm Level),是 ERPNext 和 Frappe 中的字段级权限系统。它允许管理员控制 DocType 中敏感字段的访问权限,而无需隐藏或限制整个文档。

    权限级别控制什么

    DocType 中的每个字段都有一个权限级别。默认情况下,字段的权限级别为0。级别为 0 的字段受 DocType 的常规权限控制。

    当字段被分配了更高的权限级别,例如1或2时,用户需要在角色权限管理器中拥有该级别的匹配权限行。如果没有匹配的权限,用户可能仍然可以打开文档,但根据配置的权限,高级别字段可能被隐藏或设为只读。

    权限级别的用途

    当大多数用户需要处理文档,但只有部分用户应查看或编辑敏感信息时,权限级别非常有用。这避免了为保护少数几个字段而创建单独的 DocType 或自定义工作流。

    • 销售: 销售用户可以创建报价单,而只有经理可以编辑折扣审批字段。
    • 人力资源: 人力资源用户可以查看员工记录,而薪资详情仅对薪资角色可用。
    • 财务: 用户可以查看供应商发票,而银行或税务相关字段仅限于财务经理访问。
    • 支持: 支持用户可以更新工单详情,而内部升级备注仅对高级用户可见。

    权限级别如何工作

    1. 在 DocType 或自定义表单中为字段分配一个权限级别。
    2. 使用角色权限管理器定义每个角色在每个权限级别可以执行的操作。
    3. 当用户打开文档时,ERPNext 会检查用户的角色以及每个字段的权限级别。
    4. 如果用户拥有该字段权限级别的权限,则根据允许的操作(如读取或写入)提供该字段。
    5. 如果用户没有该权限级别的权限,即使该用户可以访问文档本身,该字段也会受到限制。

    示例

    假设一个销售订单包含以下字段:

    • 客户 权限级别为 0
    • 项目 权限级别为 0
    • 交货日期 权限级别为 0
    • 已批准折扣 权限级别为 1
    • 管理层备注 权限级别为 2

    仅拥有级别 0 权限的销售用户可以使用常规的销售订单字段。拥有级别 1 权限的销售经理还可以读取或更新“已批准折扣”字段。拥有级别 2 权限的销售总监也可以访问“管理层备注”。

    权限级别与角色权限管理器

    只有当权限级别与角色权限配对时,它们才变得有用。在角色权限管理器中,每个权限行都有一个级别值。该值必须与字段的权限级别匹配。

    例如,如果某个字段设置为权限级别 1,则该角色需要在该 DocType 上拥有级别 1 的权限行。然后,该行可以根据 DocType 和业务需求允许执行读取、写入、创建、提交、取消或修改等操作。

    良好实践

    • 将大多数字段保持在权限级别 0。
    • 仅对确实需要额外控制的字段使用更高的权限级别。
    • 使用清晰的字段标签,以便在配置期间轻松识别受限制的字段。
    • 在依赖设置之前,使用非管理员用户测试权限。
    • 避免创建过多级别,因为权限规则可能难以审计。
    • 记录每个受限制字段被分配更高权限级别的原因。

    常见错误

    • 将字段设置为级别 1,但未添加级别 1 的角色权限: 用户可能会意外失去对该字段的访问权限。
    • 认为文档访问权限意味着字段访问权限: 用户可以访问文档,但仍可能无法访问更高级别的字段。
    • 使用权限级别代替工作流审批: 权限级别控制字段访问。它们不能替代需要业务流程控制时的审批工作流。
    • 仅以管理员身份测试: 管理员访问权限可能隐藏权限问题。始终使用目标角色进行测试。
    • 用户与权限
    • 角色权限管理器
    • DocType 权限
    • 自定义表单

    修改现有用户的邮箱或重命名用户

    用户 ID 是根据电子邮件地址创建的。当用户被重命名时,其值会在所有现有记录(包括变更日志)中更新。因此,这是一个资源密集型操作。如果在重命名用户时遇到超时问题,可以考虑使用更新后的电子邮件地址创建一个新的用户 ID,并禁用旧用户。

    如果您需要更改用户的电子邮件地址或用户名,请使用 ERPNext 内置的重命名工具。这会在所有关联记录中更新用户的唯一 ID,同时保留分配、权限和历史数据。

    要更改用户的电子邮件 ID,请按照以下步骤操作:

    用户列表 -> 打开用户 > 点击菜单 -> 重命名 > 输入新的电子邮件 ID。保存

    前提条件

    您必须拥有管理员权限才能重命名用户。

    步骤

    1. 转到设置 > 用户和权限 > 用户。
    2. 打开您想要重命名的用户。
    3. 点击表单右上角的菜单 (⋮)。
    4. 选择重命名。
    5. 输入新的电子邮件地址或用户名。
    6. 点击保存。

    重命名后会发生什么?

    ERPNext 会自动更新系统中所有对该用户的引用。这确保了:

    • 现有文档链接保持不变。
    • 分配继续有效。
    • 用户权限得以保留。
    • 历史记录能正确引用重命名后的用户。

    权限错误问题

    问题:用户已分配了“账户用户”和“账户经理”等角色。但在访问“应收账款”报表时,用户仍收到无权限访问“地区主数据”的错误信息。

    回答:

    根据 ERPNext 的权限系统,用户要能访问某个表单或报表,必须至少对该表单/报表中的所有链接字段拥有读取权限。由于“地区”是“应收账款”报表中的一个链接字段,请添加一条权限规则,让“账户用户/经理”至少对“地区主数据”拥有读取权限。请按照以下步骤解决此问题。

    1. 分配给用户的角色是“账户用户”和“账户经理”。
    2. 如错误信息所示,该用户没有“地区主数据”的权限。根据默认权限,分配给该用户的上述角色均未对“地区主数据”拥有任何权限。
    3. 为解决此问题,我已为“账户用户”角色分配了“地区主数据”的读取权限。

    根据此权限更新,用户应该能够正常访问“应收账款”报表。

    权限级别错误

    在权限管理器中自定义规则时,您可能会收到一条错误消息,内容如下:

    对于系统管理员 (或其他角色),在客户 (或其他单据) 的第 8 行,级别 2 (或其他级别):必须先设置级别 0 的权限,然后才能设置更高级别的权限。

    错误消息表明问题出在该单据的现有权限设置中。

    对于任何角色,在分配权限级别 1 或 2(及更高)的权限之前,必须先分配权限级别 0 的权限。错误消息指出系统管理员已被分配了权限级别 1 和 2 的权限,但未分配级别 0 的权限。您应首先通过以下方式更正系统管理员角色的权限:

    • 为系统管理员分配级别 0 的权限。

    或者

    • 删除级别 1 和 2 的权限。

    执行上述任一步骤后,您应该能够成功地在角色权限管理器中添加新的权限规则。

    最大用户数限制问题

    您的 ERPNext 订阅取决于您订阅的系统用户数量。一旦超过该限制,系统将不允许您创建更多用户。例如,您订阅了 10 个用户。如果您已在账户中创建了 10 个系统用户,系统将不允许您创建第 11 个系统用户,并且您会看到以下消息。

    要解决此问题,您需要执行以下操作之一:

    1. 购买新用户,或

    2. 禁用当前用户

    然而,有时即使您尚未用尽订阅计划中的系统用户数量,仍可能遇到此问题。例如,您的限制是 5 个系统用户,而您只创建了 3 个用户。但在创建第 4 个用户时,您却收到了上述消息。原因可能是某些用户的“同时会话”字段值大于 1。

    每个同时会话被视为 1 个系统用户。例如,如果您创建了 3 个用户,其中一人的“同时会话”设置为 3,那么您总共有 5 个用户,即 3 + 1 + 1 = 5 个同时会话/系统用户。

    为了让系统允许您创建更多用户,您需要减少这些用户的同时会话数。为此,请进入用户的个人资料,在安全设置下,相应设置/减少“同时会话”的值。

    注意: 您仍然可以创建网站用户,因为对此没有限制。

    基于层级的用户权限

    问题:

    如何配置用户权限,使员工既能查看自己的费用报销单,也能查看向其汇报的下属的费用报销单?

    答案:

    在员工主数据中,可以为每位员工定义其汇报对象。根据定义的“汇报给”关系,员工层级结构也会随之建立。

    员工层级结构

    此外,当用户与员工关联后,系统会按如下方式创建用户权限。根据此用户权限,员工将能够查看自己在人力资源模块中创建的文档,以及为其下属员工创建的文档。

    根据此配置,当向 Kenneth 汇报的用户创建费用报销单时,Kenneth 也能访问该报销单。

    请确保在向其汇报的员工信息中,将上级员工的员工编号更新为“汇报给”字段。之后,经理应能查看为其下属创建的费用报销单及其他文档(如请假申请、绩效评估等)。

    编辑报表的导出/打印权限

    要处理报表的导出/打印权限,请使用该报表所基于的文档类型的角色权限管理器。

    步骤 1:

    确定报表是从哪个文档类型生成的

    步骤 2:

    进入角色权限管理器,使用相同的文档类型进行筛选 (在我们的示例中为销售发票),并根据角色编辑权限