> ## Documentation Index
> Fetch the complete documentation index at: https://docs.alforse.com/llms.txt
> Use this file to discover all available pages before exploring further.

# 权限与访问

> 管理员如何通过模块-操作授权、员工类型模板、个人覆盖、邮件邀请以及面向车间的 PIN 账户，控制谁能在 Alforse 中查看和修改什么。

管理员通过权限来决定每个人在公司中可以查看和执行哪些操作。Alforse 中的访问权限从不隐含授予：每一项权限都是显式的**授权**（grant），将一个模块（例如销售或库存管理）与一个操作（查看、创建、更新或删除）配对；没有任何授权的人可以登录，但无法打开任何模块。

相关页面：[人员](https://docs.alforse.com/zh/docs/reference/people.md)介绍员工记录，[API 密钥](https://docs.alforse.com/zh/docs/building/api-keys.md)介绍同一模型下的程序化访问，[双重身份验证](https://docs.alforse.com/zh/docs/reference/two-factor.md)介绍登录安全。

## 概览

| 概念 | 作用 | 管理位置 |
| - | - | - |
| **授权** | 一个模块加一个操作，例如 `sales_view`。 | 任意权限矩阵 |
| **员工类型** | 可复用的授权模板。 | **用户 → 员工类型** |
| **个人覆盖** | 对某个人的模板所做的例外。 | **用户 → 账户** |
| **批量编辑器** | 一次为多人添加或替换授权。 | **用户 → 账户** |
| **邀请** | 新成员加入并获得初始授权的方式。 | **用户 → 账户** |
| **控制台操作员** | 面向共用车间工位、仅用 PIN 的账户。 | **用户 → 操作员** |

## 模块-操作模型

### 授权名称

授权的写法为 `<module>_<action>`，例如 `sales_view`、`inventory_update` 或 `purchasing_create`。`sales_view` 允许读取销售记录；`inventory_update` 允许编辑库存。任何授权都不隐含另一项授权。

### 模块

模块列表是固定的，权限表会拒绝任何其他键：

会计、文档、开票、库存管理、消息、零件、人员、打印、生产、采购、质量、资源、销售、设置、用户和工作流。

另有两个内部模块，即物料（Items）和工时卡（Timecards），它们从不出现在权限界面上，所以上面的列表就是您可以编辑的全部内容。

### 操作

每个模块行只显示该模块支持的操作，取自以下四种：

FieldType

<details>
  <summary>**view**</summary>

  查看该模块的记录。没有它，该模块的页面会对用户完全隐藏。
</details>

<details>
  <summary>**create**</summary>

  添加记录。
</details>

<details>
  <summary>**update**</summary>

  修改现有记录。
</details>

<details>
  <summary>**delete**</summary>

  删除记录。
</details>

### 权限矩阵

所有编辑权限的位置都使用同一个矩阵：**每个模块一行，每个操作一个复选框**。

* 点击单元格，切换单项授权。
* 点击行，整体开启或关闭一个模块。
* 点击表头，选中全部。

员工类型模板、个人覆盖、批量编辑器以及 API 密钥的范围都使用这个相同的矩阵，因此只需学一次。

### 公司范围

NOTE

**授权按公司生效**

每项授权都会记录它所覆盖的公司，因此同一个人在其所属的每家公司中可以拥有不同的权限。界面始终为您当前所在的公司编辑权限。特殊值 `"0"` 表示“所有公司”，真正的跨公司管理员就是以此表示的。对于跨多家公司的人员，参见[多公司设置](https://docs.alforse.com/zh/docs/reference/intercompany.md)。

### 两层强制检查

Alforse 对每项授权检查两次：

1. **在应用中**，用于显示或隐藏界面和按钮。
2. **在数据库中**，通过行级安全，因此绕过界面的请求仍然无法访问其授权未覆盖的数据。

正是数据库这一层，让同一模型对[API 密钥](https://docs.alforse.com/zh/docs/building/api-keys.md)也是安全的，API 密钥的范围使用的正是这种 `module_action` 形式。

## 员工类型

### 用模板代替勾选框

**员工类型**是一组有名称的授权。与其为每位新员工勾选几十个单元格，不如一次定义好一个类型，例如“采购员”，拥有完整的采购权限和仅可查看的库存权限，然后分配给他们。该类型的授权会成为分配到它的每个人的起点。

请在**用户 → 员工类型**下编辑类型，该功能在包含自定义权限的套餐中可用。

HEADS UP

**修改类型不会改变已属于该类型的人员**

类型的授权在您分配时被复制。此后再编辑类型，只会影响*之后*分配的人；已在该类型下的人保留其当前授权。要更新现有员工，请使用[批量权限编辑器](#overrides-and-bulk-edits)。

### 系统类型

有两个类型是预置的，不能删除。每个类型带有固定的 `systemType` 值，因此您可以重命名其标签而不会破坏 Alforse 的内部查找：

FieldType

<details>
  <summary>**管理员**</summary>

  完全访问。授予负责管理公司 Alforse 设置的人员。
</details>

<details>
  <summary>**控制台操作员**</summary>

  用于车间 PIN 账户。添加操作员时 Alforse 会自动分配；无需手动分配。
</details>

其他所有类型都可以创建、重命名和删除。一家公司每种系统类型最多拥有一个。

## 覆盖与批量编辑

### 个人覆盖

在**用户 → 账户**下，每位员工的矩阵以其员工类型为起点。勾选或清除某个单元格，只会为该人记录一项例外；类型本身不变。

当您把某人调到另一个类型时，Alforse 会询问是用新模板替换其当前授权，还是保留。

### 批量权限编辑器

要一次修改多人，请选中这些用户，选择一种模式，然后设置矩阵：

FieldType

<details>
  <summary>**添加权限**</summary>

  在每个用户现有权限的基础上叠加所选授权。不会移除任何权限。
</details>

<details>
  <summary>**更新权限**</summary>

  用该矩阵替换每个所选用户的整套权限。
</details>

可用它把员工类型的变更推行到现有员工，或一步给整个部门增加一个新模块。**添加**的意思是“同时给所有人这些权限”；**更新**的意思是“让所有人恰好是这样”，所以只有在打算覆盖时才选择**更新**。

### 变更何时生效

NOTE

**变更在用户的下一次请求时生效**

为了提高速度，Alforse 会缓存每个用户的有效权限，并在您更改其授权时清除该缓存，所以新权限在其下一次请求时生效。如果变更似乎仍未生效，几乎总是会话已过期：退出再重新登录即可强制重新读取。

## 邀请人员

### 邀请的工作方式

您从不为其他人设置密码。相反，您通过电子邮件**邀请**他们，他们在接受时自行创建登录凭据。

1. 前往**用户 → 账户**。
2. 添加员工，填写姓名、电子邮件、员工类型和位置。
3. Alforse 创建账户，记录一条邀请，并向此人发送电子邮件，内含完成加入的链接。

邀请是以电子邮件为键、限定于公司的记录。它携带此人初始的授权，因此对方一接受，访问权限就已就绪。

### 账户状态

员工的状态由邀请和账户推导而来：

<details>
  <summary>**已邀请**</summary>

  邀请已发送但未被接受。此人在使用链接之前无法登录。
</details>

<details open>
  <summary>**启用**</summary>

  邀请已被接受，账户正常使用中。
</details>

<details>
  <summary>**已停用**</summary>

  账户已被停用，或邀请在被接受前已撤销。无任何访问权限。
</details>

### 管理邀请与离职人员

* 在账户列表中，可对未处理的邀请执行**重新发送**或**撤销**。
* **停用**在职员工，即将其从公司移除、清除其授权，并标记为已停用。此人不会被删除，因为他们可能仍属于其他公司。完整记录参见[人员](https://docs.alforse.com/zh/docs/reference/people.md)。

## 车间 PIN 账户

### 什么是控制台操作员

**控制台操作员**在共用工位上使用 **4 位 PIN** 而不是电子邮件登录来登录 [MES](https://docs.alforse.com/zh/docs/reference/mes.md)。他们是一种独立类型的账户。

### 添加操作员

1. 前往**用户 → 操作员**。只有公司启用了控制台模式，此界面才会出现。
2. 输入姓名和位置。
3. Alforse 创建一个没有电子邮件登录的轻量级账户，分配**控制台操作员**员工类型，并生成一个 4 位 PIN。
4. 请立即复制该 PIN。它只显示一次，因为 Alforse 只存储其哈希值。

在车间，操作员点按自己的姓名并输入 PIN；Alforse 在开始其会话前会校验该 PIN。

### 重置或设置 PIN

| 任务 | 位置 | 所需权限 |
| - | - | - |
| 重置操作员遗失的 PIN | **用户 → 操作员** | `users_update` |
| 为任何其他员工设置控制台 PIN | **账户**列表，**设置控制台PIN** | `users_update` 和 `settings_update` |

重置会生成新的 PIN，旧 PIN 立即失效。为普通员工设置 PIN 需要额外的设置权限，因为持有该 PIN 的人可以在车间以该员工的身份操作。

### PIN 锁定

| 限制 | 范围 | 效果 |
| - | - | - |
| 15 分钟内输错 5 次 PIN | 某一个人，跨所有工位 | 该人的 PIN 登录被锁定。锁定起初为一分钟，重复违规则翻倍。之后输入正确的 PIN 会清零其计数。 |
| 15 分钟内输错 30 次 PIN | 某一个工位，跨所有人 | 该工位被限制。使用同一登录的工位共用此上限。 |

### 将操作员转换为完整用户

NOTE

**操作员可以升级为完整用户**

当 PIN 账户需要真正的 ERP 访问权限时，为它设置电子邮件和完整的员工类型。Alforse 会把同一个人转为普通的受邀用户，其此前的车间活动仍归属于这同一个身份。

### 为什么 PIN 账户受到限制

PIN 账户只拥有其控制台操作员类型所允许的授权。这是有意为之：遗失或共用的平板电脑无法被用来进入 Alforse 的办公端。操作员自己的工作流程（上工打卡、报告数量、发料）参见 [MES 参考](https://docs.alforse.com/zh/docs/reference/mes.md)。

## 故障排查

| 消息或现象 | 原因 | 解决办法 |
| - | - | - |
| "Incorrect PIN"（PIN 不正确） | PIN 与操作员账户不匹配。 | 重新输入，或在**用户 → 操作员**下重置。 |
| "Too many incorrect PINs. Please wait a few minutes and try again."（错误 PIN 次数过多，请等待几分钟后重试。） | 达到了 [PIN 锁定](#pin-lockouts)限制。 | 等待；之后输入正确的 PIN 会清零此人的计数。 |
| "No PIN set. Ask an admin to set a console PIN for you."（未设置 PIN，请让管理员为您设置控制台 PIN。） | 此人没有 PIN。PIN 始终由管理员生成，从不在车间自行选择。 | 对操作员使用**重置PIN**，对其他员工使用**设置控制台PIN**。 |
| "Group members are required"（需要组成员） | 批量操作（权限编辑、分组编辑、停用、重新发送或撤销邀请）在未选择任何人的情况下执行。 | 至少选择一名用户。 |
| 用户可以登录但什么也看不到 | 他们缺少所需模块的 `<module>_view`。 | 通过其类型或覆盖授予所需的 `<module>_<action>`。 |
| 编辑员工类型没有改变现有人员 | 类型只会作为变更之后分配人员的初始值。 | 使用批量编辑器：**更新**用于覆盖，**添加**用于叠加。 |
| 权限变更似乎没有生效 | 用户的会话已过期。 | 让其退出后重新登录。 |
| 缺少**用户 → 操作员** | 公司未启用控制台模式。 | 启用控制台模式，或在**账户**下邀请普通用户。 |

## 各部分所在位置

**人员**

这些权限所作用的个人账户。

[Open](https://docs.alforse.com/zh/docs/reference/people.md)

**API 密钥**

使用相同模块-操作范围的程序化访问。

[Open](https://docs.alforse.com/zh/docs/building/api-keys.md)

**MES 应用**

控制台操作员用 PIN 登录并管理车间的地方。

[Open](https://docs.alforse.com/zh/docs/reference/mes.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.