Files
Endorphin-Document/guide/02-user-identity.md
T

4.1 KiB

2. 用户身份

用户身份是代码归属与 namespace 定位的基础。每个代码段必须关联一个归属用户,该用户以系统内唯一的用户名标识。

2.1 用户名与显示名

用户名(handle)是用于定位用户的唯一名称,其作用类似社交平台的 @ 名。显示名是用于界面展示的姓名或昵称,不承担唯一定位职责。

属性 用户名 显示名
用途 唯一定位用户及其 namespace 面向读者展示名称
唯一性 在本系统内唯一 可以重复
参与 namespace key 是 否
示例 alice 林

两个用户可以同时使用显示名“林”,但其用户名必须不同。检索代码时使用用户名,不能以显示名替代。

用户名的唯一性限定在本系统的身份范围内。其他系统中相同的用户名不自动表示同一用户。

2.2 key 中的用户部分

完整 namespace key 由用户名与非空 namespace 路径组成:

用户名: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。

2.3 归属上下文

用户身份通过代码之外的 key 与索引成员关系关联。读取、编辑和处理代码时,系统使用该归属上下文。

场景名、变量名、注释、字符串和存储对象名均不定义归属用户。两段内容相同的代码分别关联不同用户时,其归属上下文仍然不同。

正文中的 use alice:shop.pricing 表示引用目标,不表示当前代码属于 alice。例如,bob:shop.checkout 可以引用 alice 的逻辑,其自身归属仍是 bob。

2.4 归属用户、操作用户与作者

三种身份承担不同职责:

身份 含义 关联对象
归属用户 代码位于谁的 namespace namespace key 与代码成员关系
操作用户 谁发起读取、修改或执行 本次操作的身份上下文
作者或修改者 谁编写或修改了代码 编辑或历史记录

在协作授权存在的情况下,操作用户可以与归属用户不同。例如 bob 获得修改 alice:shop 的权限后,修改行为不会将目标自动改归 bob:shop。

Agent 或服务代用户操作时同样需要区分操作身份与目标归属。协作、委托和历史记录的具体规则参见规范状态。

2.5 身份与访问权限

namespace key 是定位信息,不是访问凭据。知道用户名或 key,不等于获得读取、修改或调用其中声明的权限。

代码归属与访问控制分别处理:归属确定目标,授权确定本次操作是否允许。代码默认公开性、跨用户可见性及权限继承规则不由 key 的结构推导。

2.6 名称比较与生命周期

注册、检索与改名必须使用一致的用户名相等判定。两个被判定为相同的用户名不能同时指向不同用户。

显示名不参与 key,修改显示名不改变代码归属。handle 的变更涉及既有 key 与引用的定位;旧名称复用还涉及历史引用是否继续指向原用户。

用户名字符集合、大小写、Unicode 处理、改名、名称复用、账号停用和归属转移的具体规则集中列于规范状态。本书示例使用简单的小写用户名说明结构,不据此限定最终字符集。

上一章:语言概览 · 下一章:namespace · 目录