• Lv1
    粉丝0

积分2 / 贡献0

提问0答案被采纳0文章1

作者动态

    [经验分享] OpenHarmony应用权限管理全解析:从理论到实战(1)

    xiao_zhou 显示全部楼层 发表于 7 天前
    ### **一、课程目标**

    本文章将系统讲解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)

    **欢迎在评论区交流探讨!** 🚀

    ©著作权归作者所有,转载或内容合作请联系作者

    您尚未登录,无法参与评论,登录后可以:
    参与开源共建问题交流
    认同或收藏高质量问答
    获取积分成为开源共建先驱

    Copyright   ©2025  OpenHarmony开发者论坛  京ICP备2020036654号-3 |技术支持 Discuz!

    返回顶部