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(', '))
|
|||
|
|
}
|