# 登录

> 标题栏上的用户小块、登录窗口和它的 PIN 键盘、切换与退出登录、身份一变对打开着的页面做了什么，以及浏览器和远程回路怎么登录。

登录会把一块屏幕上生效的权限从**未登录**角色换成某位用户的角色。它从来不是必须的：工作站以走过来就能用的那个身份打开，并且一直可用。登录只有一条路，却有两扇门，标题栏上的**用户小块**和用户页面的**当前登录**根节点，两扇门打开的是同一个窗口、走的是同一道校验。一个连查看都不被允许的浏览器会拿到第三个界面，也就是查看登录卡片，那是同一块面板去掉了外框。

登录不是对工作站的改动。运行时被免费模式的限制停住、每一次写配置都被拒绝的时候，它照样可用。

## 用户小块 {#the-user-chip}

这个小块坐在标题栏右侧，主题按键和一条分隔线之后，每一条路由、每一条连接上都有。它显示一个带圆点的人形字形（登录着是绿色，否则是灰色）和登录的那个显示名，没有人登录时则写**登录**。按下它就打开登录窗口。这个小块从不显示角色名称：退出登录时它是一句召唤，登录之后它是一个名字。

## 登录窗口 {#the-sign-in-dialog}

这个窗口的标题是**登录**；名册显示着而且已经有人登录时，标题是**切换用户**。有人登录着的时候，它的抬头写着“当前登录身份 **{name}**”，并带一个**退出登录**按钮。按 Esc 或者点窗口外面，它什么都不改就关掉。

### 名册 {#the-roster}

名册是这台工作站的每一位本地用户，按名册顺序排列，每一行有一个由首字母拼出的两字母标记、显示名，以及两种标记之一：一把锁，“需要 PIN”，或者一个回车箭头，“轻触即可登录”。轻触一位没有 PIN 的用户，立刻登录。轻触一位有 PIN 的用户，打开 PIN 那一步。每一块屏幕给出的名册都一样，不管上面登录的是什么角色。

名册为空时，窗口显示的是原因，而不是一张空单子：

| 情形 | 文字 |
| --- | --- |
| 还没有本地用户 | “本工作站还没有本地用户。第一个，也就是主管理员，在‘用户’页面上创建。” |
| 已发布的演示 | “这是已发布的演示，因此没有可以登录的账户。这里的一切都只能查看。” |

### PIN 那一步 {#the-pin-step}

PIN 这一步显示所选用户的标记和名字、一个回到名册的**返回**按钮、抬头**输入 PIN**，以及 PIN 键盘：一个读数区，每输入一位显示一个点（从不显示数字本身），空着的时候，PIN 键盘持有键盘焦点就显示一个闪烁的光标（这一步打开时它就取得焦点），焦点不在它身上时显示可接受的位数范围；1 到 9 各一个键、一个删除键、0，还有一个确认键，输满 4 位就亮起来。到 6 位时键盘不再接受输入。它同时也是一个键盘控件：这一步打开时键盘取得焦点，数字往后追加，Backspace 删除，Enter 确认。点一下读数区，焦点就回到键盘上，而且不会弹出屏幕键盘。

被拒绝时消息留在这一步、留在键盘下面，并清空读数区好让你再试一次：

| 文字 | 什么时候 |
| --- | --- |
| 这个 PIN 不对。 | PIN 没有通过校验。 |
| PIN 输错太多次。请在 {wait} 后重试。 | 某条浏览器回路撞上了错误 PIN 的次数上限；等待时间不到一分钟按秒写，超过一分钟按整分钟写。 |
| 登录失败。 | 一位没有 PIN 的用户被拒绝（在这中间被移出了名册）。 |

一次登录还在路上的时候，名册和键盘都不响应，于是连点两下也不会发起第二次尝试。

## 切换与退出登录 {#switching-and-signing-out}

**切换用户**就是在已登录的屏幕上打开的同一个窗口：挑另一位用户，身份就变了，中间不用先退出登录。**退出登录**，在窗口的抬头处或者在当前登录面板上，把这块屏幕退回到“未登录”角色。在工作站自己的窗口上，它清掉工作站会话；在浏览器上，它只清掉那一条连接。

每一种结果都会报到这条连接的操作记录条上，也就是状态栏里：

| 结果 | 操作记录条上的文字 |
| --- | --- |
| 已登录 | 已以 {name} 身份登录。 |
| 被拒绝，没有人登录 | 登录被拒绝。 没有人登录。 |
| 被拒绝，有人登录着 | 登录被拒绝。 仍然以 {name} 身份登录。 |
| 被锁住 | PIN 输错太多次，登录已被阻止。请在 {wait} 后重试。（后面跟着同样那句身份的话） |
| 已退出登录 | 已退出登录。 或者 {name} 已退出登录。 |

每一次尝试还会在事件页面的控制台里留下一行，组件写作 **工作站访问**，写明是哪个账户、这次尝试从哪里来（工作站自己的窗口写“shell 内嵌视图”，浏览器写“{address} 上的浏览器”），于是一个班次里的权限升降事后读得回来。一次成功的登录会盖上这位用户的最近访问时间，名册上显示的就是它。

## 按连接算的身份 {#per-connection-identity}

工作站自己的窗口（那个内嵌视图，也就是桌面外壳本身）驱动的是**工作站会话**：在那里登录，就是在试验台前登录。每一个浏览器，不管是在网络另一头的平板上还是在工作站自己的机器上，都带着**它自己**的操作者：在那里登录只改变那一个浏览器，而且绝不会继承、也绝不会改动试验台前登录的是谁。用户小块、当前登录面板，以及一块屏幕上读到的每一项权限，回答的都是那块屏幕这条连接的情况，所以远程查看的人永远借不到坐在工作站前的那位管理员。

两条路还有一处不同。浏览器输错的 PIN 会被计数，按账户、按地址分别计：连错五次就把门关上一分钟，之后每再错五次等待时间翻倍，最多十五分钟；一串失败安静五分钟之后就被忘掉。工作站自己的窗口有意不设这个计数器：在试验台前敲键盘的人就在机器旁边，而锁定会是工作站唯一一种把自己的操作者关在门外的方式。

## 身份一变，什么跟着变 {#what-changes-when-the-identity-changes}

每一个界面都实时读取身份，所以一次登录、一次退出登录、一次角色改动或者一次移除用户，都立刻在它触及的每一条连接上生效：

- 导航栏按新角色能打开的条目重画。如果你所在的页面属于新身份看不见的那个条目，外壳就跳到它看得见的第一个条目上。
- 每个页面重新校验它自己那项权限；浏览器到达一条它的角色打不开的路由时，页面的位置上给出的是登录界面。
- 每一个动词、每一个字段都在被按下的那一刻重新校验角色，因此一块在旧身份下画出来的屏幕，不可能以旧身份行事。
- 用户页面上的一次角色改动，会到达持有这个角色的每一位用户，无论他们是否登录着；一位被移出名册的用户，在他持有的每一条连接上都掉回“未登录”角色。
- 被“可见于”清单挡在新角色之外的画面会离开 View 列表，而为其中之一敲进去的地址会静静地退回。

## 浏览器与远程访问 {#browsers-and-remote-access}

工作站自己机器上的浏览器是一条本地回环连接：它始终可以查看，在有人在它上面登录之前一直用“未登录”角色。另一台设备上的浏览器，只有[远程访问](remote-access)开着才够得到这台工作站，而且还要它的身份持有**远程访问（局域网）**才看得了。出厂时那个开关在“未登录”角色上是关的，所以打开远程访问并不会暴露任何东西，直到某位持有这项权限的用户在那台设备上登录，或者你有意把它给了走过来就用的那个角色，供一台自助终端或者平板使用。

一个无权查看的浏览器拿到的不是任何页面，而是那张**查看登录**卡片：品牌标记、“Ganter Lab”、“工作站”，以及一块没有标题栏也没有导航栏的登录面板。名册上方那一行写明被拒绝的是什么：

| 那一行 | 什么时候 |
| --- | --- |
| 登录后即可从网络上查看这个工作站。 | 一条网络连接，它的身份没有“远程访问（局域网）”。上面有用户登录着时写：“**{name}** 的角色没有远程访问权限。请改用角色具备该权限的用户登录。” |
| 登录后才能打开这个页面。 | 一条可以查看的连接，落在它的角色打不开的路由上。有用户登录着时写：“**{name}** 的角色打不开这个页面。请改用角色能打开它的用户登录。”没有人登录时写：“这里没有人登录，而这个页面不对**未登录**角色开放。请改用角色能打开它的用户登录。” |

在一台“未登录”角色没有“远程访问（局域网）”的网络设备上退出登录，那台设备就掉回查看登录卡片。除非工作站提供 HTTPS（那是远程访问里的一个设置），否则 PIN 是明文过网络的。

## 已配置的设备 {#configured-devices}

平板或电脑可以在远程访问页面上配置，让工作站认得它，并按它所在行的设置打开它（见[已配置的设备](remote-access#configured-devices)）。它的设置中有四项会改变谁在上面登录，或者在那里能按什么：

| 设置 | 它做什么 |
| --- | --- |
| 固定用户 | 设备不经登录就以这位用户、带着这位用户的角色进入：用户小块显示这位用户的名字，页面和画面跟随角色，在那里记录下的操作归这位用户。只有角色拥有远程访问（局域网）的用户才能担任。若这位用户被删除，或角色失去该权限，设备会像任何浏览器一样要求登录，直到重新设置。 |
| 在其上登录 | 名册上的任何人仍然可以在设备上登录：从用户小块，或者在锁定于起始画面的设备上，从角落里不显眼的**登录**键，和在任何地方一样输入 PIN。设备随后带着那个人的角色。退出登录会带回固定用户，绝不会变成未登录角色；登录也绝不会解除锁定。 |
| 无人操作若干分钟后返回 | 设备在设定的分钟数内无人触碰时，在固定用户之上登录的人会被退出登录，设备回到它的起始画面。 |
| 仅查看 | 无论谁在登录，包括管理员，都不能从设备发出任何命令：显示哪些页面和画面仍由角色决定，上面的每个命令仍然显示，变灰并注明原因“这台设备仅可查看。”用画面上的按钮打开另一个画面仍然可以，登录和退出登录也可以。 |

诊断日志为从已配置设备做的事保留的每一条记录，都在用户名字旁边带着设备的名称。

## 登录不做什么 {#what-signing-in-does-not-do}

- 它不停止、不启动、也不改变运行时，并且不影响内置的 OPC UA 服务器，也不影响通过 MCP 连上来的代理。
- 它不会让这台工作站登录到它的 Ganter 账户。那是[账户](account-ganter-account)页面的事，而且它属于工作站，不属于某位用户。
- 它打不开角色并不持有的东西。提权恰好就是角色的那些开关；没有临时越权，也没有按用户开的例外。
- 它不会在输错 PIN 之后锁住工作站自己的窗口，而且从不记住 PIN。
- 在已发布的演示上无法尝试登录，因为它的名册按设计就是空的。
