78 lines
4.1 KiB
Markdown
78 lines
4.1 KiB
Markdown
# 2. 用户身份
|
|
|
|
用户身份是代码归属与 namespace 定位的基础。每个代码段必须关联一个归属用户,该用户以系统内唯一的用户名标识。
|
|
|
|
## 2.1 用户名与显示名
|
|
|
|
用户名(handle)是用于定位用户的唯一名称,其作用类似社交平台的 `@` 名。显示名是用于界面展示的姓名或昵称,不承担唯一定位职责。
|
|
|
|
| 属性 | 用户名 | 显示名 |
|
|
| ---------------- | ------------------ | -------- |
|
|
| 用途 | 唯一定位用户及其 namespace | 面向读者展示名称 |
|
|
| 唯一性 | 在本系统内唯一 | 可以重复 |
|
|
| 参与 namespace key | 是 | 否 |
|
|
| 示例 | `alice` | `林` |
|
|
|
|
两个用户可以同时使用显示名“林”,但其用户名必须不同。检索代码时使用用户名,不能以显示名替代。
|
|
|
|
用户名的唯一性限定在本系统的身份范围内。其他系统中相同的用户名不自动表示同一用户。
|
|
|
|
## 2.2 key 中的用户部分
|
|
|
|
完整 namespace key 由用户名与非空 namespace 路径组成:
|
|
|
|
```text
|
|
用户名:namespace路径
|
|
alice:shop.ui
|
|
```
|
|
|
|
冒号前的 `alice` 是用户名,不带 `@` 前缀;冒号后的 `shop.ui` 定位该用户名下的 namespace。
|
|
|
|
| key | 归属用户 | namespace 路径 |
|
|
| --- | --- | --- |
|
|
| `alice:shop` | `alice` | `shop` |
|
|
| `bob:shop` | `bob` | `shop` |
|
|
| `alice:shop.ui` | `alice` | `shop.ui` |
|
|
|
|
`alice:shop` 与 `bob:shop` 是不同的 namespace,即使它们具有相同的路径或相同的代码内容。
|
|
|
|
只有用户名不能构成代码归属地址。代码必须同时属于至少一级 namespace,完整格式见[namespace](03-namespaces.md)。
|
|
|
|
## 2.3 归属上下文
|
|
|
|
用户身份通过代码之外的 key 与索引成员关系关联。读取、编辑和处理代码时,系统使用该归属上下文。
|
|
|
|
函数名、变量名、注释、字符串和存储对象名均不定义归属用户。两段内容相同的代码分别关联不同用户时,其归属上下文仍然不同。
|
|
|
|
正文中的 `use alice:shop.pricing` 表示引用目标,不表示当前代码属于 alice。例如,`bob:shop.checkout` 可以引用 alice 的逻辑,其自身归属仍是 bob。
|
|
|
|
## 2.4 归属用户、操作用户与作者
|
|
|
|
三种身份承担不同职责:
|
|
|
|
| 身份 | 含义 | 关联对象 |
|
|
| --- | --- | --- |
|
|
| 归属用户 | 代码位于谁的 namespace | namespace key 与代码成员关系 |
|
|
| 操作用户 | 谁发起读取、修改或执行 | 本次操作的身份上下文 |
|
|
| 作者或修改者 | 谁编写或修改了代码 | 编辑或历史记录 |
|
|
|
|
在协作授权存在的情况下,操作用户可以与归属用户不同。例如 bob 获得修改 `alice:shop` 的权限后,修改行为不会将目标自动改归 `bob:shop`。
|
|
|
|
Agent 或服务代用户操作时同样需要区分操作身份与目标归属。协作、委托和历史记录的具体规则参见[规范状态](../appendices/specification-status.md#身份与权限)。
|
|
|
|
## 2.5 身份与访问权限
|
|
|
|
namespace key 是定位信息,不是访问凭据。知道用户名或 key,不等于获得读取、修改或调用其中声明的权限。
|
|
|
|
代码归属与访问控制分别处理:归属确定目标,授权确定本次操作是否允许。代码默认公开性、跨用户可见性及权限继承规则不由 key 的结构推导。
|
|
|
|
## 2.6 名称比较与生命周期
|
|
|
|
注册、检索与改名必须使用一致的用户名相等判定。两个被判定为相同的用户名不能同时指向不同用户。
|
|
|
|
显示名不参与 key,修改显示名不改变代码归属。handle 的变更涉及既有 key 与引用的定位;旧名称复用还涉及历史引用是否继续指向原用户。
|
|
|
|
用户名字符集合、大小写、Unicode 处理、改名、名称复用、账号停用和归属转移的具体规则集中列于[规范状态](../appendices/specification-status.md#身份与权限)。本书示例使用简单的小写用户名说明结构,不据此限定最终字符集。
|
|
|
|
[上一章:语言概览](01-overview.md) · [下一章:namespace](03-namespaces.md) · [目录](../README.md)
|