📖 查看本文案例
OpenHarmony应用访问控制权限申请开发范例
概念介绍
在应用首次启动时,我们常常遇到,需要申请授权才能使用应用的完整功能,比如在应用首次启动时,会弹窗申请开启位置权限、申请相机权限等,如图所示。本文就以橘子购物示例应用为例,来讲解OpenHarmony应用首次启动申请授权相关的技术点。
OpenHarmony应用框架提供了200+应用权限,在权限列表文件中,我们可以看到每种权限有不同的APL级别、权限类型、ACL使能信息,如下所示。我们先看下应用权限相关的几个概念。
ohos.permission.WRITE_CONTACTS
允许应用添加、移除或更改联系人数据。
权限级别:system_basic
授权方式:user_grant
ACL使能:TRUE
- 应用APL等级
元能力权限等级APL(Ability Privilege Level)指的是应用的权限申请优先级的定义,不同APL等级的应用能够申请的权限等级不同。
应用的等级可以分为三个等级,如下表。默认情况下,应用的APL等级都为normal等级。权限列表中的权限级别指的就是APL等级,应用
APL级别 | 说明 |
---|---|
system_core | 该等级的应用服务提供操作系统核心能力。 |
system_basic | 该等级的应用服务提供系统基础服务。 |
normal | 普通应用。 |
- 权限类型
根据授权方式的不同,权限类型可分为system_grant(系统授权)和user_grant(用户授权)。对应权限列表中的授权方式。
- 访问控制列表(ACL)
每个应用权限中的权限级别和应用的APL等级是一一对应的。原则上,拥有低APL等级的应用默认无法申请更高等级的权限。
访问控制列表ACL(Access Control List)提供了解决低等级应用访问高等级权限问题的特殊渠道。
橘子购物示例应用首次启动申请权限的示例图:
配置文件
了解了权限相关的概念,我们看下权限相关的配置文件。
module.json5配置文件
应用需要在项目的module.json5配置文件中逐个声明所需的权限,否则应用将无法获取授权。不管是什么授权方式,system_grant(系统授权)还是user_grant(用户授权)都需要在配置文件中声明。
在配置文件的requestPermissions属性数组中配置所需的权限,包含3个属性:name、reason和usedScene。
其中:
- name 指定权限名称,是必填项。
- reason 描述申请权限的原因,可选项。
- usedScene 描述权限使用的场景和时机,可选项。
- abilities:标识需要使用到该权限的Ability,标签为数组形式。可选项。
- when:标识权限使用的时机,值为inuse/always。inuse:表示为仅允许前台使用;always:表示前后台都可使用。
应用默认的权限等级为normal。如果应用需要申请高于默认等级的权限,除了在配置文件中进行声明之外,还需要通过ACL方式进行声明使用。下文会介绍。
module.json5配置文件片段如下:
{
"module" : {
...
"requestPermissions":[
{
"name" : "ohos.permission.PERMISSION1",
"reason": "$string:reason",
"usedScene": {
"abilities": [
"FormAbility"
],
"when":"inuse"
}
},
...
]
}
}
HarmonyAppProvision配置文件
应用默认权限等级normal,当应用需要申请system_basic和system_core等级的权限时,也就是说,如果需要申请的权限等级高于应用默认的等级,需要使用ACL方式声明使用。
例如,如果应用需要访问用户公共目录中的音乐文件,需要申请ohos.permission.WRITE_AUDIO权限,该权限属于system_basic等级。如果应用需要截取屏幕图像,则需要申请ohos.permission.CAPTURE_SCREEN权限,该权限属于system_core等级。此时,需要将相关权限项配置到HarmonyAppProvision配置文件的ACL字段中。
HarmonyAppProvision配置文件用于配置应用的权限、签名信息等,该文件位置在:`OpenHarmony SDK