43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
// ============================================================
|
||
// 权限管理 — 自动授予摄像头、麦克风权限
|
||
// 职责:绕过浏览器的权限弹窗,Electron 下直接授权
|
||
// ============================================================
|
||
|
||
import { session } from 'electron'
|
||
|
||
/**
|
||
* 设置权限自动授予
|
||
* Electron 默认不会弹出权限请求,需要在 Main Process 中显式处理
|
||
*/
|
||
export function setupPermissions(): void {
|
||
const allowedPermissions = [
|
||
'media', // 摄像头和麦克风
|
||
'mediaKeySystem', // 媒体键
|
||
'notifications', // 通知
|
||
'clipboard-sanitized-write', // 剪贴板写入
|
||
]
|
||
|
||
// 处理权限请求
|
||
session.defaultSession.setPermissionRequestHandler(
|
||
(_webContents, permission, callback, details) => {
|
||
console.log(`[Permissions] 收到权限请求: ${permission}`, details)
|
||
if (allowedPermissions.includes(permission)) {
|
||
console.log(`[Permissions] ✅ 已授予: ${permission}`)
|
||
callback(true)
|
||
} else {
|
||
console.warn(`[Permissions] ❌ 拒绝权限请求: ${permission}`)
|
||
callback(false)
|
||
}
|
||
}
|
||
)
|
||
|
||
// 权限检查:对允许的权限始终返回已授权
|
||
session.defaultSession.setPermissionCheckHandler(
|
||
(_webContents, permission) => {
|
||
return allowedPermissions.includes(permission)
|
||
}
|
||
)
|
||
|
||
console.log('[Permissions] 已设置权限自动授予:', allowedPermissions.join(', '))
|
||
}
|