跳到主要内容
Nexlyh.
归档

工程实践

权限先于改动

一个能执行命令、能改文件的代理,如果没有明确的权限模型,就不该被放进真实仓库。

Nexlyh 团队约 6 分钟
  • Coder
  • 安全

能力越大,越需要一道闸门

编码代理和补全工具的能力边界完全不同。补全只往编辑器缓冲区里写文本,你按下接受之前什么都不会发生。代理会直接执行命令、写文件、改配置。

一旦它能做这些事,权限就不再是一个可选项。没有权限模型的设计等于默认全部放行,而默认全部放行在真实仓库里是不能接受的。

按可逆性划分

我们划分权限的依据只有一个:这个动作能不能撤销。

读取文件、搜索、查看目录这类动作不改变任何状态,不需要确认。写文件、删除、执行命令会改变磁盘状态,必须确认。执行命令尤其需要谨慎,因为一条命令的影响范围可能远超当前仓库。

拒绝也要能说清楚

权限对话框必须让人在几秒内做出判断,所以它需要回答三个问题:要做什么,影响哪些文件,为什么需要这一步。

只写一句“允许执行命令吗”是不够的。我们要求把具体命令、目标路径和上下文一起摆出来,否则用户只能靠猜,最后要么全部拒绝、要么全部放行,两种结果都失去了确认的意义。

误触比误拒更贵

确认对话框加了一段短暂的延迟,并采用明确的按键而不是回车。原因是误拒的代价只是重来一次,而误触批准一个删除操作是不可逆的。

这个设计会让操作手感稍微慢一点,但我们认为方向是对的。

模式而不是单次授权

如果每个动作都要确认,连续工作时会被打断到无法使用。所以除了逐步确认,还提供几种模式:接受编辑、只读计划模式、以及明确开启的完全放行。

模式的选择是显式的,会一直显示在状态栏上。用户任何时候都能看清当前处在哪一种模式下。