Skip to main content

electron 的权限配置

· 4 min read
Swnb

管理员权限(windows)

如果有修改用户注册表的需求, 需要获取管理员权限, 可以在 electron-builder 里面设置

electron-builder.yml

_10
win:
_10
requestedExecutionLevel: requireAdministrator

程序在启动的时候就会请求管理员权限

媒体权限

如果要获取摄像头和麦克风的权限, 首先要创建一个 plist , plist 里面可以指定以下的权限 plist

plist 如下所示

entitlements.mac.plist

_16
<?xml version="1.0" encoding="UTF-8"?>
_16
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
_16
<plist version="1.0">
_16
<dict>
_16
<key>com.apple.security.cs.allow-jit</key>
_16
<true/>
_16
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
_16
<true/>
_16
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
_16
<true/>
_16
<key>com.apple.security.device.audio-input</key>
_16
<true/>
_16
<key>com.apple.security.device.camera</key>
_16
<true/>
_16
</dict>
_16
</plist>

💡提示

plist 必须完整, 如果你删掉了一些内容, 那么应用会崩溃😭

然后配置 electron-builder

配置 plist

加上请求权限的提示

屏幕录制的提示

electron-builder.yml

_10
mac:
_10
hardenedRuntime: true # 启用 hardenedRuntime
_10
entitlements: entitlements.mac.plist # plist 文件路径

辅助功能

如果你的 electron 需要调用一些 .node 文件去做操作,比如锁屏,那就要在 plist 里面指定 disable-library-validation

entitlements.mac.plist

_18
<?xml version="1.0" encoding="UTF-8"?>
_18
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
_18
<plist version="1.0">
_18
<dict>
_18
<key>com.apple.security.cs.allow-jit</key>
_18
<true/>
_18
<key>com.apple.security.cs.allow-unsigned-executable-memory</key>
_18
<true/>
_18
<key>com.apple.security.cs.allow-dyld-environment-variables</key>
_18
<true/>
_18
<key>com.apple.security.device.audio-input</key>
_18
<true/>
_18
<key>com.apple.security.device.camera</key>
_18
<true/>
_18
<key>com.apple.security.cs.disable-library-validation</key>
_18
<true/>
_18
</dict>
_18
</plist>

在应用中请求并确认权限

查看是否有 摄像头 权限,第一次会弹出询问框

查看是否有 麦克风 权限,第一次会弹出询问框

查看是否有 屏幕录制 权限

查看是否有 辅助功能 权限

main.tsx

_10
const isCameraAccessGranted = await systemPreferences.askForMediaAccess(
_10
"camera"
_10
)

可以根据上面的权限状态弹出提示框来提示用户打开权限