贝壳域
Shell拥有每个人的账户(User他们的团体Group)),其作用(包括:Role页:1
简介 workspace.member ⊂ workspace.admin 和原子 user.reader, (中文(简体) ), user.writer, (中文(简体) ),
group.reader, (中文(简体) ), group.writer, (中文(简体) ), directory.provisioner),视图为没有配置文件的账户
陆地上的土地(view_access),实例命名空间及其别名,以及一个应用程序视图,其
进入点。 所有权威都来自克内尔角色,由克内尔直接或通过团体持有
extends_with;目录可能提供账户和组。 设计、其法律以及
修正案载于 docs/design/accounts-and-roles.md· ;
每一个法律的执行和测试 docs/accounts/laws.tsv,每个
假设情况的证据 docs/accounts/scenarios.tsv。 。 。 .
角色前的模型保存在它的呼叫者 legacy/ 文件夹,列于
legacy/LEDGER.md 方法 docs/legacy.md; 内容
说明如下: docs/legacy/shell-domain-before-roles.md。 。 。 .
合同
| 方法 | 来电 | 获准 | 投入 | 产出 |
|---|---|---|---|---|
User.create | 静态 | user.writer | { email, name, givenName?, familyName?, attributes? } | { user, created } |
User.invite | 静态 | user.writer | { user, profile?: 'member' | 'admin' } | { invitationId, user, state } |
User.update | 账户 | user.writer | { name?, email?, givenName?, familyName?, icon?, attributes? } | {} |
User.updateProfile | 账户 | 持有者 | { name?, icon? } | {} |
User.saveSettings | 账户 | 账户本身 | { set?, unset? } | { settings } |
User.deactivate, (中文(简体) ), User.reactivate, (中文(简体) ), User.delete | 账户 | user.writer | {} | {} |
User.provision | 静态 | directory.provisioner | { directory, externalId, email, name, givenName?, familyName?, active } | { user, created, adopted } |
User.deprovision | 静态 | directory.provisioner | { directory, externalId } | {} |
Group.create | 静态 | group.writer | { name, description?, icon?, attributes? } | { group } |
Group.update, (中文(简体) ), Group.delete | 组合 | group.writer | { name?, description?, icon?, attributes? }, (中文(简体) ), {} | {} |
Group.assignMember, (中文(简体) ), Group.unassignMember | 静态 | group.writer, (中文(简体) ), directory.provisioner | { member, group } (单位:千美元)@NodeId 路径) | {} |
Group.provision | 静态 | directory.provisioner | { directory, externalId, name } | { group, created } |
Group.deprovision | 静态 | directory.provisioner | { directory, externalId } | {} |
disconnectDirectory | 函数 | directory.provisioner | { directory } | { users, groups } |
WorkspaceSettings.save | /:shell.astrale.ai:core.settings | workspace.admin | { set?, unset? } | { settings } |
拒绝(reason.code,家属: USER_EMAIL_INVALID (评价-错误); USER_NOT_FOUND, (中文(简体) ),
GROUP_NOT_FOUND (NOT FOUND) (中文(简体) ); USER_EMAIL_TAKEN, (中文(简体) ), USER_DIRECTORY_MANAGED, (中文(简体) ),
USER_ADMINISTRATOR_PROTECTED, (中文(简体) ), USER_LAST_ADMINISTRATOR, (中文(简体) ), USER_ACTIVE, (中文(简体) ), USER_SUSPENDED, (中文(简体) ),
PROFILE_NOT_HELD, (中文(简体) ), GROUP_DIRECTORY_MANAGED, (中文(简体) ), GROUP_NOT_DIRECTORY_MANAGED, (中文(简体) ),
GROUP_ROLE_PROTECTED (详细情况) { role }, (中文(简体) ), GROUP_MEMBERSHIP_CYCLE, (中文(简体) ), DIRECTORY_CONFLICT
(详细情况) { user }, (中文(简体) ), ACCOUNT_CHANGED, (中文(简体) ), GROUP_CHANGED 成员
方法保存 INVALID_GROUP_MEMBERSHIP_REFERENCE, (中文(简体) ), GROUP_MEMBERSHIP_ENDPOINTS_UNAVAILABLE, (中文(简体) ),
GROUP_MEMBERSHIP_CONFLICT, (中文(简体) ), GROUP_MEMBERSHIP_UNCONFIRMED,邀请 INVITATION_CONFLICT, (中文(简体) ),
INVITATION_REJECTED设置方法 SETTINGS_TOO_MANY, (中文(简体) ), SETTINGS_NAME_REPEATED
(评价-错误), SETTINGS_NOT_FOUND (NOT FOUND), (英语:, SETTINGS_CHANGED (冲突)。 SDK没有FORBIDDEN的家族: 一项禁止为了
账户的状况、一个集团或其打电话者回答CONFLICT.
用户和组声明不写规则:只有他们的方法来写,然后是Shell的授权
克内尔无法说明的法律(U1-U6,G2-G4). 需要账户的域询问 user.writer
(和 user.reader在释放时, requirements({ roles: [{ role: S.core.nodes['user.writer'], members: [requirements.domain] }] }), (中文(简体) ),
将自己的记录与账户连接起来,并用自己的功能进行测试
hasRole 政策。 每个字都保留 frozen =: suspended 或者说 directoryActive === false (U2):该
Kernel拒绝验证一个被冻结的账户.
设置
设置是最多64个名字的 JSON 对象, 应用程序选择并验证
本身( GUI 存储) dock, (中文(简体) ), wallpaper, (中文(简体) ), appearance, (中文(简体) ), locale...):新设置不需要
壳放出. UserSettings 持有一个人的账户 user_settings 财务报告和审定财务报表
第一次更改时创建; 只有账户本身读和写它们, 没有角色读取另一个
被删除的账户. WorkspaceSettings一个核心节点
/:shell.astrale.ai:core.settings,持有工作空间的默认和定制:每个人
阅读它,管理员保存它。 更改合并到存储对象 : set 写名字,
unset 脱去,在它读到的修订版上; 当另一个窗口先写时, Shell读到
并再次合并,所以两者都不消除.
邀请
User.invite 授予配置文件( e)extends_with 改为 profile.<name>),然后请管理员发送
通过壳牌公司的入学整合邀请,该整合包含 { user, email, profile, requestId, requestedBy }:电子邮件是账户的自有. 它的提供人薄荷薄荷 一种有引用约束的果壳证明
为它配置的 HTTPS 入侵观众。 返回的待发邀请无法证明电子邮件
交货或完成登记。 管理员将已核实的电子邮件的第一个签名绑定到
账户(U8).
释放
domain.ts 宣布角色和范围. workspace.admin 每一贝壳作用和可给予的
Kernel 角色 (R2); 捆绑成员 QQ 管理员和原子角色 释放成员 (AM1);
成员持有核心 writer,管理核心 admin; 没有配置文件持有核心 reader,哪个管理员
凡只开放其见解者,均得享受它的报酬
内核 authority.reader, (中文(简体) ), graph.reader 财务报告和审定财务报表 graph.writer。安装它需要安装器
赋予它所约束的每一个角色:根.
查看访问
给一个身份的视图决定它在哪里降落, 而不是它读的. view_access 运行
从任何身份——一个账户,一个组,一个角色——到一个Kernel视图;每个端与它的
节点. 管理员用"变相"来写;管理员用"变相"来写;或边民的观众和成员用"变相"来读.
访客登陆是自己的查询(@astrale-os/shell: workspace.member 打开工作空间; 其他人读
内核 reader,它持有的意见.
命名空间和别名
一个别名 一个节点。 它不给任何好处. 名称最多指定一个节点
每个作者的命名空间 : alias 宣告内核密钥 unique: [['source', 'slug']] 联合国
所以Kernel拒绝在任何突变、壳牌或一种
管理员自己的 mutate。边缘身份每个命名空间最多有一个别名。 一个别名
是一个路径, /:shell.astrale.ai:core.views~"shell.astrale.ai:class.alias"(roadmap),并达到
节点只供读者读取该节点. 它的目标终点接受任何节点,一个类舍
不拥有,所以其节点被删除时其别名会解去; Namespace stay.
核心命名空间 views 保存打开的名字 /v/<name>名称空间和别名声明
read: true 财务报告和审定财务报表 traverse: true:一个读者列出并沿用它可能读取的节点的别名,
对任何其他节点的别名并不存在。 贝壳,通过它的别名,边缘,
找到每个名字的节点,甚至一个它不读.
link 命名目标路径到达的任何节点, 无论域拥有它: 一个别名不给任何东西,
每个读者只看见其阅读的节点的别名。 仅提供节点
管理员认为是接口的礼貌, 而不是服务器的保证; 任何已学习的作者
从突变的定位器中找到路径是否达到节点.
| 方法 | 电话 | 拒绝 |
|---|---|---|
| 链接 | 一次有壳牌权威的突变 其定位器解决了 target | INVALID_NAME, (中文(简体) ), TARGET_NOT_FOUND, (中文(简体) ), NAME_TAKEN, (中文(简体) ), TARGET_ALREADY_ALIASED |
| 取消链接 | 一个是用壳牌的威信读出别名Path,一个是突变 | INVALID_NAME, (中文(简体) ), NAME_NOT_FOUND |
| 重命名 | 相同; 将名称重命名为不写 | INVALID_NAME, (中文(简体) ), NAME_NOT_FOUND, (中文(简体) ), NAME_TAKEN |
名字是小写中的边缘弹道( Edge sults) (INVALID_NAME) (中文(简体) ). 这条规则是Shell的:一个管理员
写入 mutate 绕过它,从来没有键。 除了钥匙以外,没有什么能保护一个名字的独特性.
unlink 财务报告和审定财务报表 rename 更改化名时,只保留他们读取的名字,所以
同时重命名答案 NAME_NOT_FOUND 而不是改变另一个名字。 贝壳映射克内尔
密封拒绝 :
| 内核拒绝变异 | 链接 | 取消链接 | 重命名 |
|---|---|---|---|
MUTATION_POST_STATE_INVALID规则 duplicate-key | NAME_TAKEN | 宣传 | NAME_TAKEN |
MUTATION_PRECONDITION_FAILED (别名"边缘"存在,已消失,或带有另一个名称) | TARGET_ALREADY_ALIASED | NAME_NOT_FOUND | NAME_NOT_FOUND |
MUTATION_LOCATOR_INVALID (目标路径达到节点,或目标被删除) | TARGET_NOT_FOUND | NAME_NOT_FOUND | NAME_NOT_FOUND |
其他的失败都会蔓延. workspace.admin 持有者拨打三种方法并写入 alias
边由他们自己的突变.
版本数
域名的版本是 version 联 合 国 domain/package.json,请写出
也写到根上 package.json,项目,什么 astrale-domain publish 读取。 一个
数字名称 npm 软件包 @astrale-domains/shell 和登记册
shell.astrale.ai@<version>,所以一个实例按数字安装一个已出版的版本:
astrale domain install shell.astrale.ai@<version> -i <instance> --as <instance>-root
shell.astrale.ai@<major>.<minor> 安装该行最稳定版本. 域名
发布稳定版本,从0.1.1起;0.1.0起,首次出版,命名为0.1.0-β.51
释放.
来源和资格
每个声明,查询和突变都有自己的语义文件. 地层根是外层; 集成/提供者拥有外部效果、观点/ ui 拥有 目录表面。 运行时有一个默认导出并绑定每个处理器 . Dataset 由 root astrale.config.ts 懒得引用 .
域名作者从@astrale-domains/ shell 导入 Schema; 平台工人使用明文 /域和/运行时输出. 创建/登记、安装当局、邀请 交付,运行时间回放和浏览器渲染是单独的资质边界. 重新设计行政组成、公布登记册组和真正的邀请/创建 出行的路口仍然是出行出行的出行口;这一来源的README并不是这些出行口经过的证据.
出版边界
@astrale-domains/shell 是可执行的平台软件包,也是对普通软件的故意例外
域名出版产品. 它发布远程壳牌域定义和平台所需的运行时间
通过明确规定的工人部署 ./domain 财务报告和审定财务报表 ./runtime 子路径,而其根仍然
只有司马 因此,它的构建将明确的根源汇编为: tsconfig.package.json 并适用
壳牌公司所属的规范化和对发射平台关闭的检查。 仅源 # 化名为
重写到相对的联署材料和宣言参考文献,因此消费者路径绘图无法捕捉私人壳牌
类型。 Tarball 合格后核查出口的准确性、孤立的亚道、缺乏来源
地图,并仅使用公共 npm 依赖性安装.
一般情况 astrale-domain package 命令只保留Schema,只显示域根加
软件包元数据。 此 Shell 例外不得复制到普通产品域或用于
削弱SDK合同。 部署消费者必须使用明确可执行的子路径,从而连接
schema 导入无法通过 Shell 的私人应用程序或运行时间执行 .
源、包和确定性测试资格仍然有别于安装设备, 发布软件包、浏览器和现场证据。 Shell 不代理认证 符;标准域符交换由协议,服务器,和SDK所拥有.