Skip to content

feat: 提权会话复用,5 分钟内免密 - #2

Merged
cuijianzhuang merged 1 commit into
mainfrom
fix/tcc-db-path-under-sudo
Aug 29, 2026
Merged

cuijianzhuang merged 1 commit into
mainfrom
fix/tcc-db-path-under-sudo

Conversation

@cuijianzhuang

Copy link
Copy Markdown
Owner

osascript 的 do shell script ... with administrator privileges 不做任何 缓存,每次执行都是全新的 Authorization 会话,所以每次都弹密码框。

改为持有一个 AuthorizationRef 并在 App 生命周期内复用:首次执行时
AuthorizationCopyRights 弹一次框,之后在 system.privilege.admin 的 默认有效期(5 分钟)内直接复用,不再弹。

AuthorizationExecuteWithPrivileges 在 Swift 里被标为 unavailable, 运行时用 dlsym 取函数指针调用;取不到则回退到原来的 osascript 路径。
该 API 拿不到子进程退出码,改用 shell 里的 rc 变量 + 输出标记回传。

界面在需要提权时显示授权剩余秒数,并提供「释放」按钮立即失效。

osascript 的 do shell script ... with administrator privileges 不做任何
缓存,每次执行都是全新的 Authorization 会话,所以每次都弹密码框。

改为持有一个 AuthorizationRef 并在 App 生命周期内复用:首次执行时
AuthorizationCopyRights 弹一次框,之后在 system.privilege.admin 的
默认有效期(5 分钟)内直接复用,不再弹。

AuthorizationExecuteWithPrivileges 在 Swift 里被标为 unavailable,
运行时用 dlsym 取函数指针调用;取不到则回退到原来的 osascript 路径。
该 API 拿不到子进程退出码,改用 shell 里的 rc 变量 + 输出标记回传。

界面在需要提权时显示授权剩余秒数,并提供「释放」按钮立即失效。

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@cuijianzhuang
cuijianzhuang merged commit 9846e5e into main Aug 29, 2026
1 check passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant