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

![image.png](https://forums-obs.openharmony.cn/forum/202502/13/140303xesiidss06wwwqss.png "image.png")

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

![image.png](https://forums-obs.openharmony.cn/forum/202502/13/140908xebbhwrckehh3b7h.png "image.png")

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

![image.png](https://forums-obs.openharmony.cn/forum/202502/13/141017w1yzwey1z9f71yhw.png "image.png")

![image.png](https://forums-obs.openharmony.cn/forum/202502/13/141034ai0lszldhvdseol0.png "image.png")

```
"requestPermissions": [{
  "name": "ohos.permission.INTERNET"
}],
```

#### 2. 如果是用户授权(比如说麦克风权限)

![image.png](https://forums-obs.openharmony.cn/forum/202502/13/141252klkg2bqgazl0qqtl.png "image.png")

我们要在配置文件中声明

https://docs.openharmony.cn/pages/v5.0/zh-cn/application-dev/security/AccessToken/declare-permissions.md

![image.png](https://forums-obs.openharmony.cn/forum/202502/13/142021kigmk12zuiio6eeg.png "image.png")

![image.png](https://forums-obs.openharmony.cn/forum/202502/13/141448ntbty0whpdhz4bfw.png "image.png")

还需要在代码中调用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%')
  }
}
```

![](https://forums-obs.openharmony.cn/forum/)

#### 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