OpenHarmony开发者论坛
标题:
OpenHarmony应用权限管理全解析:从理论到实战(1)
[打印本页]
作者:
xiao_zhou
时间:
2025-2-13 14:27
标题:
OpenHarmony应用权限管理全解析:从理论到实战(1)
### **一、课程目标**
本文章将系统讲解OpenHarmony应用权限管理的核心要点,帮助开发者:
1. 掌握 `system_grant`(系统授权)与 `user_grant`(用户授权)的区别与使用场景;
2. 理解 `normal`、`system_basic`、`system_core`三种权限等级的划分与作用;
3. 学会应用权限的申请流程,包括配置文件声明与动态请求用户授权。
---
### **二、权限类型:system\_grant vs user\_grant**
#### 1. **system\_grant(系统授权)**
* **特点**:安装应用时由系统自动授予,无需用户手动操作。
* **适用场景**:涉及基础功能且无需敏感数据的权限,如网络访问、设备信息读取等。
* **配置方式**:在 `config.json`中声明权限并标记为 `system_grant`。
#### 2. **user\_grant(用户授权)**
* **特点**:需在应用运行时通过弹窗请求用户授权,用户同意后才生效。
* **适用场景**:涉及用户隐私或敏感操作的权限,如摄像头、麦克风、位置等。
* **配置方式**:在 `config.json`中声明权限,并通过代码动态请求。
---
### **三、权限等级:normal、system\_basic、system\_core**
权限等级基于APL(Ability Privilege Level)划分,等级越高,开放能力越强:
1. **normal**
* 默认等级,适用于普通应用,权限范围最小。
2. **system\_basic**
* 提供系统基础服务,如后台任务管理、通知等。
3. **system\_core**
* 涉及操作系统核心能力,仅系统级应用可申请(如系统设置、OTA升级)。
**注意**:权限等级需与 `config.json(FA 模型)或者 module.json5(Stage 模型)`中的 `apl`字段匹配,否则权限申请会失败。
---
### **四、权限申请实操指南**
#### 1.明确需求
在应用权限列表找到我们需要的权限 查看权限的授权方式
https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/AccessToken/permissions-for-all.md

#### 2.如果是系统授权(比如说网络权限申请)

我们就只需要在配置文件中声明权限:


```
"requestPermissions": [{
"name": "ohos.permission.INTERNET"
}],
```
#### 2. 如果是用户授权(比如说麦克风权限)

我们要在配置文件中声明
https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/AccessToken/declare-permissions.md


还需要在代码中调用API拉起授权弹窗:
```
Index
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
import { Permissions } from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';
const context = getContext(this) as common.UIAbilityContext
@Entry
@Component
struct Index {
@State message: string = 'Hello World';
async aboutToAppear(): Promise<void> {
await this.requestMicrophone()
}
async requestMicrophone(){
const permissions:Array<Permissions> = ['ohos.permission.MICROPHONE']
const atManger = abilityAccessCtrl.createAtManager()
const requestResult =await atManger.requestPermissionsFromUser(
context,
permissions
)
}
build() {
Row() {
Column() {
Text(this.message)
.fontSize(50)
.fontWeight(FontWeight.Bold)
}
.width('100%')
}
.height('100%')
}
}
```

#### 3. **二次请求授权**
* 若用户首次拒绝授权,应用**无法再次直接弹窗请求**。
* 需调用 `requestPermissionOnSetting()`,跳转系统设置界面引导用户手动授权。(在下篇中将会讲解)
---
### **五、常见问题与注意事项**
1. **权限滥用风险**
* 仅申请必要权限,避免过度索取。
* `system_core`权限需谨慎使用,需通过系统签名校验。
2. **上架审核要求**
* `usedScene`字段需清晰描述权限使用场景,否则应用可能被驳回。
3. **兼容性**
* 不同OpenHarmony版本权限机制可能略有差异,建议参考官方文档适配。
---
### **六、总结**
通过本文,您已掌握:
1. **权限类型**:系统授权与用户授权的核心区别;
2. **权限等级**:normal、system\_basic、system\_core的划分与适用范围;
3. **完整流程**:从声明权限到动态请求用户授权的代码实现。
**下一步建议**:结合实际项目需求,合理规划权限申请策略,并遵循最小化权限原则,保障用户隐私与系统安全。
---
**相关资源**
* [OpenHarmony权限管理官方文档](https://gitee.com/openharmony/docs)
* [HarmonyOS开发者工具下载](https://developer.harmonyos.com/cn/develop/deveco-studio)
**欢迎在评论区交流探讨!** 🚀
欢迎光临 OpenHarmony开发者论坛 (https://forums.openharmony.cn/)
Powered by Discuz! X3.5