权限配置
权限配置
功能
BT 默认保持兼容行为,允许脚本使用全部标准库能力。生产环境可以通过环境变量收紧权限,在标准库边界拒绝文件、进程、网络、HTTP、MySQL、设备、环境变量和桌面能力。
权限检查只发生在标准库构造或方法调用边界,不进入 VM 普通指令循环。
语法
BT_PERMISSION_ALLOW=fs,net,http BT_PERMISSION_DENY=process,device
运行时查看当前配置:
BT.stats().permission
参数
| 环境变量 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
| BT_PERMISSION_ALLOW | String | 否 | 未配置 | 允许能力列表。配置后只允许列表内能力;支持逗号、分号或空白分隔。 |
| BT_PERMISSION_DENY | String | 否 | 未配置 | 拒绝能力列表。拒绝列表优先级高于允许列表。 |
能力名称:
| 名称 | 能力 |
|---|---|
| fs | fs() 文件读写、目录操作。 |
| process | process() 子进程能力。 |
| net | net()、net.listen()、net.connect()、DNS 和接口信息。 |
| http | reqwest() HTTP 客户端能力,也支持别名 reqwest。 |
| mysql | mysql() 数据库能力。 |
| device | device()、串口扫描和串口读写。 |
| env | BT.env()、BT.set_env()、BT.envs() 和 PATH 覆盖层。 |
| desktop | bt_app 桌面桥接命令,包括窗口、系统对话框、托盘、剪贴板、通知、拖入文件事件和应用级桌面操作。 |
特殊值:
| 值 | 说明 |
|---|---|
| all | 表示全部能力。 |
| none | 表示空能力列表。 |
返回值
BT.stats().permission 返回对象:
| 字段 | 类型 | 说明 |
|---|---|---|
| denied | Int | 当前进程内权限拒绝次数。 |
| config | Object | 当前权限配置快照。 |
config 字段:
| 字段 | 类型 | 说明 |
|---|---|---|
| allow_configured | Bool | 是否显式配置了 BT_PERMISSION_ALLOW。 |
| allow | Array | 允许列表中的能力名称。未配置时返回全部能力。 |
| deny | Array | 拒绝列表中的能力名称。 |
| allowed | Array | 当前实际允许的能力名称。 |
| config_error | String / Empty | 权限配置错误;没有错误时为 empty。 |
代码示例
stats = BT.stats().permission allowed = stats.config.allowed.join(',') // 输出:fs,process,net,http,mysql,device,env,desktop print allowed
stats = BT.stats().permission denied = stats.denied // 输出:0 print denied
注意事项
- 默认不设置
BT_PERMISSION_ALLOW和BT_PERMISSION_DENY时,BT 允许全部能力,兼容现有脚本。 - 如果同时配置允许和拒绝,拒绝列表优先生效。例如
BT_PERMISSION_ALLOW=all且BT_PERMISSION_DENY=process时,process()会被拒绝。 - 权限拒绝会抛出中文运行时错误,不会返回
empty或静默失败。 - 权限配置在进程内首次读取后缓存;常驻进程修改环境变量后需要重启进程才会生效。
-
desktop控制window.bt.window、window.bt.dialog、window.bt.tray、window.bt.clipboard、window.bt.notify、window.bt.drag、window.bt.app和初始化项目命令;window.bt.call()仍是长期 VM 业务通道,被调用 BT 函数内部使用的fs、process、net等能力继续按各自权限检查。 - 权限配置回归示例位于
examples/permission-stats.bt,会验证 allow/deny 组合和BT.stats().permission配置快照。