跳转到内容
Crystal CodeDocs
简简体中文

会话目录访问

CodingSession 拥有一个会话的目录授权。它的工作区解析器携带活动的 DirectoryAccessPolicy,与主工作区根和审批授权分开。不可变的 DirectoryAccess 值包含规范化的绝对 path 和 mode(read 或 write),以及可选的 sourcePath,用于入口路径与目标不同时的绝对、词法规范化入口路径。入口路径只是撤销元数据;授权始终匹配 path。Write 包含 read。隐式工作区可写;最具体的目录规则获胜,包括工作区或其某个子目录的显式只读规则。匹配使用目录边界和 Windows 大小写不敏感,通过符号链接解析工具路径,并独立检查凭据路径。

/access 列出主工作区和会话规则。/access add <path> read|write 验证已存在的目录并添加或替换其规范化规则;/access remove <path> 先匹配记录的入口路径,再匹配规范化目标,即使目录或入口符号链接已不存在。被重定向的入口撤销原规则,而不是新目标的独立规则。路径解析失败报告路径错误,而不是命令用法。包含空格的路径可以用双引号。回合或压缩期间拒绝变更。更改会立即保存 SessionDocument.access,刷新活动模型指令和 {{directories}} 占位符,并通过共享策略影响已经绑定的执行器。新会话上,任何 --allow-read 或 --allow-write 标志都使这些标志成为完整种子。它们替换工作区默认值,不与之合并,且只作为会话访问元数据记录,从不是 config.json 或 access.json 中的偏好。恢复的会话保留已保存的规则;标志仍覆盖这些规则,且不加载默认值。同一规范化根的冲突模式在启动时被拒绝。没有设置标志且会话不是恢复时,~/.crystal/access.json 提供种子。该文件按规范化工作区根作为键,而不是 git 信任根,并位于 Home 下,因此项目不能给自己授予额外目录。缺失的文件不播种任何内容。损坏的文件,或一个目录有两种模式,不播种任何内容并报告错误;会话仍然打开。缺失的目录、凭据路径或错误模式会带着可见错误被跳过,并留在文件中。/access default 列出已存储的规则。/access default add <path> read|write 像 /access add 一样验证,写入文件,并把规则加入当前会话。/access default remove <path> 移除已存储的规则,以及当前会话中同一规范化规则。其他已保存的会话不动。回合或压缩期间拒绝变更。

已授权目录中的内置文件读取使用普通的工作区读取审批。可写目录中的写入遵循当前审批模式。ApprovalPolicy 在分类钩子、授权或审查之前拒绝显式只读写入;write 和 edit 在文件 I/O 前于路径解析时再次检查。未列出的外部路径保留现有审批行为。凭据路径仍然禁止。相对路径相对于唯一的主工作区。搜索和枚举保持现有根围栏,不会自动搜索所有已授权目录,也不会穿越跨根链接。glob、grep 和 search 的工具描述和路径 schema 明确允许工作区相对或绝对根,默认是工作区,并说明会话访问与未列出外部根的审批之别。

恢复还原已保存的绝对规则和入口路径,包括缺失目录的规则;它从不把已保存的入口解析到新重定向的根。无效的已保存规则失败关闭,而不是静默丢失只读限制。SessionResume.TryLoad 在返回文档前验证访问,直接构造会话在分配会话资源前验证它。交互启动报告红色错误并以代码 1 退出;会话内恢复报告错误,且不改变当前会话或其规则。恢复不重新应用工作区默认值,因此该会话期间移除的默认值保持移除。分叉不复制源会话的访问。Clear、fork 和成功的工作区更改从目标工作区的默认值开始。被拒绝或无操作的更改不会。额外根不发现提示、指令、插件、工具或技能。没有 access 字段的现有会话文件以空规则列表加载;没有 sourcePath 的规则仍然有效,并可以按其列出的规范化目标移除。Shell、后台 shell、外部工具和插件保留现有审批行为,不受此策略沙箱化。操作系统沙箱仍然推迟。