diff --git a/zh-cn/application-dev/security/accesstoken-guidelines.md b/zh-cn/application-dev/security/accesstoken-guidelines.md
index 527cc3b171f17cf7501c5ddf513c4e83c8870ea4..3612d22d55955ff08514ff9b0aefd8143cf087e2 100644
--- a/zh-cn/application-dev/security/accesstoken-guidelines.md
+++ b/zh-cn/application-dev/security/accesstoken-guidelines.md
@@ -6,10 +6,18 @@
本文将从如下场景分别介绍:
-- [配置文件权限声明](#配置文件权限声明)
-- [ACL方式声明](#acl方式声明)
-- [向用户申请授权](#向用户申请授权)
-- [user_grant权限预授权](#user_grant权限预授权)
+- [访问控制授权申请指导](#访问控制授权申请指导)
+ - [场景介绍](#场景介绍)
+ - [配置文件权限声明](#配置文件权限声明)
+ - [Stage模型](#stage模型)
+ - [FA模型](#fa模型)
+ - [权限使用理由的文案内容规范](#权限使用理由的文案内容规范)
+ - [ACL方式声明](#acl方式声明)
+ - [向用户申请授权](#向用户申请授权)
+ - [Stage模型](#stage模型-1)
+ - [FA模型](#fa模型-1)
+ - [user\_grant权限预授权](#user_grant权限预授权)
+ - [相关实例](#相关实例)
## 配置文件权限声明
@@ -24,8 +32,8 @@
| 标签 | 是否必填 | 说明 |
| --------- | -------- | ------------------------------------------------------------ |
| name | 是 | 权限名称。 |
-| reason | 否 | 描述申请权限的原因。
> **说明**:当申请的权限为user_grant权限时,此字段必填。 |
-| usedScene | 否 | 描述权限使用的场景和时机。
> **说明**:当申请的权限为user_grant权限时,此字段必填。 |
+| reason | 否 | 描述申请权限的原因。
> **说明**:当申请的权限为user_grant权限时,此字段必填。 |
+| usedScene | 否 | 描述权限使用的场景和时机,可参考[权限使用理由的文案内容规范](#权限使用理由的文案内容规范)。
> **说明**:当申请的权限为user_grant权限时,此字段必填。 |
| abilities | 否 | 标识需要使用到该权限的Ability,标签为数组形式。
**适用模型**:Stage模型 |
| ability | 否 | 标识需要使用到该权限的Ability,标签为数组形式。
**适用模型**:FA模型 |
| when | 否 | 标识权限使用的时机,值为`inuse/always`。
- inuse:表示为仅允许前台使用。
- always:表示前后台都可使用。 |
@@ -98,6 +106,44 @@
}
```
+### 权限使用理由的文案内容规范
+
+当申请的权限为user_grant权限时,字段usedScene(权限使用理由和时机)必填。所有的user_grant权限均被归类到某个权限组中,使用时均通过[权限组](accesstoken-overview.md#权限组和子权限)进行申请。当前支持的权限组请查看[应用权限组列表](permission-group-list.md)。
+
+**usedScene字段的内容写作规范及建议如下:**
+
+1. 如果需要申请“电话、信息、日历、通讯录、通话记录”这五个权限组的权限,根据工信部要求,需要展示具体子权限的内容与用途。
+
+ **建议句式**:
+
+ 中文:包括子权限A和子权限B,用于某事。
+
+ 英文:Includes: PermissionA and PermissionB. This is used to do/for something.
+
+ > **说明:**
中文使用逗号分割,英文使用句点分割。
+
+ **示例**:用于获取通话状态和移动网络信息,用于安全运营和统计计费服务。
+
+2. 如果当前权限组申请不涉及子权限。
+
+ **建议句式**:用于某事。
+
+ **示例**:用于扫码拍照。
+
+ > **说明:**
保持句子简洁、不要加入多余的分割符号。
+
+3. 用途描述的字串建议小于72个字符(即36个中文字符,UI界面显示大约为两行)。不能超过256个字符,以免在多语言适配后体验不好。
+
+4. 如果不写,将展示默认的申请理由。
+
+**权限使用理由展示方式:**
+
+向用户申请授权时,弹窗将以权限组维度显示,但在应用权限配置时,需要配置每个需要使用的子权限。
+
+该用途有两个展示途径:授权弹窗界面和“设置(Settings)”界面。“设置”的具体路径:设置-隐私-权限管理-某应用某权限详情
+
+系统将使用权限组内当前被申请的第一个子权限的使用理由,作为该权限组的使用理由进行展示。组内的排序,固定按照权限管理内排列的权限组数组顺序。举例说明:权限组A = {权限A, 权限B, 权限C};申请传入的是{权限C, 权限B},界面将展示权限B中的权限使用理由。
+
## ACL方式声明
当应用需要申请`system_basic`和`system_core`等级的权限时,比应用默认权限等级`normal`更高。如果需要申请的权限等级高于应用默认的等级,需要使用ACL方式声明使用。
@@ -120,7 +166,8 @@
当应用需要访问用户的隐私信息或使用系统能力时,例如获取位置信息、访问日历、使用相机拍摄照片或录制视频等,应该向用户请求授权。这需要使用 `user_grant` 类型权限。在此之前,应用需要进行权限校验,以判断当前调用者是否具备所需的权限。如果权限校验结果表明当前应用尚未被授权该权限,则应使用动态弹框授权方式,为用户提供手动授权的入口。示意效果如下图所示。
-图1 向用户申请授权
+图1 向用户申请授权
+
![](figures/permission-read_calendar.png)
> **说明**:
@@ -222,6 +269,7 @@
```
在UI中向用户申请授权。
+
```typescript
import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
import common from '@ohos.app.ability.common';
@@ -300,6 +348,7 @@ reqPermissions() {
});
}
```
+
## user_grant权限预授权
应用在申请`user_grant`类型的权限默认未授权,需要通过拉起弹框由用户确认是否授予该权限。对于一些预制应用,不希望出现弹窗申请`user_grant`类型的权限,例如系统相机应用需要使用麦克风` ohos.permission.MICROPHONE`等权限,需要对麦克风等权限进行预授权,可以通过预授权的方式完成`user_grant`类型权限的授权。[预置配置文件](https://gitee.com/openharmony/vendor_hihope/blob/master/rk3568/preinstall-config/install_list_permissions.json)在设备上的路径为`/system/etc/app/install_list_permission.json`,设备开机启动时会读取该配置文件,在应用安装会对在文件中配置的`user_grant`类型权限授权。预授权配置文件字段内容包括`bundleName`、`app_signature`和`permissions`。
@@ -308,7 +357,7 @@ reqPermissions() {
- `permissions`字段中`name`配置为需要预授权的`user_grant`类型的权限名;`permissions`字段中`userCancellable`表示为用户是否能够取消该预授权,配置为true,表示支持用户取消授权,为false则表示不支持用户取消授权。
> **说明**:
->
+>
> 当前仅支持预置应用配置该文件。
```json
diff --git a/zh-cn/application-dev/security/accesstoken-overview.md b/zh-cn/application-dev/security/accesstoken-overview.md
index ef7e1d20113d7c0f6402578ff37f469d00f59396..07625677efc17b5a192c65b8f623accaef79d79c 100644
--- a/zh-cn/application-dev/security/accesstoken-overview.md
+++ b/zh-cn/application-dev/security/accesstoken-overview.md
@@ -22,7 +22,6 @@ ATM (AccessTokenManager) 是OpenHarmony上基于AccessToken构建的统一的应
- 应用在首次启动时,避免频繁弹窗申请多个权限;权限须在用户使用对应业务功能时动态申请。
- 用户拒绝授予某个权限时,与此权限无关的其他业务功能应能正常使用,不能影响应用的正常注册或登录。
- 业务功能所需要的权限被用户拒绝且禁止后不再提示,当用户主动触发使用此业务功能或为实现业务功能所必须时,应用程序可通过界面内文字引导,让用户主动到“系统设置”中授权。
-
- 当前不允许应用自行定义权限,应用申请的权限应该从[已有的权限列表](permission-list.md)中选择。
## 权限的工作流程
@@ -54,6 +53,7 @@ ATM (AccessTokenManager) 是OpenHarmony上基于AccessToken构建的统一的应
3:应用可以通过ACL(访问控制列表)方式申请高级别的权限,具体请参考[访问控制列表(ACL)说明](#访问控制列表acl说明)。
### 权限校验的工作流程
+
应用在提供对外功能服务接口时,可以根据接口涉数据的敏感程度或所涉能力的安全威胁影响,在[权限定义列表](permission-list.md)选择合适的权限保护当前接口,对访问者进行权限校验。
当且仅当访问者获取当前接口所需权限后,才能通过当前接口的权限校验,并正常使用当前应用提供的目标功能。
@@ -70,7 +70,7 @@ ATM (AccessTokenManager) 是OpenHarmony上基于AccessToken构建的统一的应
3:应用可以使用权限校验接口对访问者进行鉴权,可参考[权限校验说明](permission-verify-guidelines.md)。
-## 权限等级说明
+## 权限等级
根据接口所涉数据的敏感程度或所涉能力的安全威胁影响,ATM模块定义了不同开放范围的权限等级来保护用户隐私。
@@ -130,7 +130,7 @@ ATM (AccessTokenManager) 是OpenHarmony上基于AccessToken构建的统一的应
- **system_core权限**
system_core权限涉及到开放操作系统核心资源的访问操作。这部分系统资源是系统最核心的底层服务,如果遭受破坏,操作系统将无法正常运行。
-
+
鉴于该类型权限对系统的影响程度非常大,目前暂不向任何三方应用开放。
## 权限类型说明
@@ -153,6 +153,14 @@ ATM (AccessTokenManager) 是OpenHarmony上基于AccessToken构建的统一的应
应用需要在应用商店的详情页面,向用户展示所申请的user_grant权限列表。
+### 权限组和子权限
+
+为了仅可能减少系统弹出的权限弹窗数量,优化交互体验,系统将逻辑紧密相关的user_grant权限组合在一起,形成多个权限组。
+
+当应用请求权限时,同一个权限组的权限将会在一个弹窗内一起请求用户授权。权限组中的某个权限,称之为该权限组的子权限。
+
+权限组和权限的归属关系并不是固定不变的,一个权限所属的权限组有可能发生变化。当前系统支持权限组请查阅[应用权限组列表](permission-group-list.md)。
+
### 不同权限类型的授权流程
如[权限的工作流程](#权限的工作流程)所示,如果应用需要获取目标权限,那么需要先进行权限申请。
@@ -163,14 +171,14 @@ ATM (AccessTokenManager) 是OpenHarmony上基于AccessToken构建的统一的应
- 权限授权
- - 如果目标权限是system_grant类型,开发者在进行权限申请后,系统会在安装应用时自动为其进行权限预授予,开发者不需要做其他操作即可使用权限。
- - 如果目标权限是user_grant类型,开发者在进行权限申请后,在运行时触发动态弹窗,请求用户授权,具体操作见[user_grant权限请求授权的步骤详解](#user_grant权限请求授权的步骤详解)。
+ - 如果目标权限是system_grant类型,开发者在进行权限申请后,系统会在安装应用时自动为其进行权限预授予,开发者不需要做其他操作即可使用权限。
+ - 如果目标权限是user_grant类型,开发者在进行权限申请后,在运行时触发动态弹窗,请求用户授权,具体操作见[user_grant权限请求授权的步骤详解](#user_grant权限请求授权的步骤详解)。
### user_grant权限请求授权的步骤详解
在应用需要获取user_grant权限时,请完成以下步骤:
-1. 在配置文件中,声明应用需要请求的权限,详见[访问控制开发指导](accesstoken-guidelines.md)。
+1. 在配置文件中,声明应用需要请求的权限,详见[访问控制开发指导-配置文件权限声明](accesstoken-guidelines.md#配置文件权限声明)。
2. 将应用中需要申请权限的目标对象与对应目标权限进行关联,让用户明确地知道,哪些操作需要用户向应用授予指定的权限。
@@ -178,10 +186,10 @@ ATM (AccessTokenManager) 是OpenHarmony上基于AccessToken构建的统一的应
4. 检查用户的授权结果,确认用户已授权才可以进行下一步操作。
-**注意事项:**
+**注意事项:**
- 每次执行需要目标权限的操作时,应用都必须检查自己是否已经具有该权限。
-- 如需检查用户是否已向您的应用授予特定权限,可以使用[checkAccessToken](../reference/apis/js-apis-abilityAccessCtrl.md#checkaccesstoken9)函数,此方法会返回 [PERMISSION_GRANTED](../reference/apis/js-apis-abilityAccessCtrl.md)或[PERMISSION_DENIED](../reference/apis/js-apis-abilityAccessCtrl.md)。具体的示例代码可以查看[访问控制开发指导](accesstoken-guidelines.md)。
+- 如需检查用户是否已向您的应用授予特定权限,可以使用[checkAccessToken](../reference/apis/js-apis-abilityAccessCtrl.md#checkaccesstoken9)函数,此方法会返回 [PERMISSION_GRANTED](../reference/apis/js-apis-abilityAccessCtrl.md)或[PERMISSION_DENIED](../reference/apis/js-apis-abilityAccessCtrl.md)。具体的示例代码可以查看[访问控制开发指导](accesstoken-guidelines.md#向用户申请授权)。
- user_grant权限授权要基于用户可知可控的原则,需要应用在运行时主动调用系统动态申请权限的接口,系统弹框由用户授权,用户结合应用运行场景的上下文,识别出应用申请相应敏感权限的合理性,从而做出正确的选择。
- 即使用户向应用授予过请求的权限,应用在调用受此权限管控的接口前,也应该先检查自己有无此权限,而不能把之前授予的状态持久化,因为用户在动态授予后还可以通过设置取消应用的权限。
diff --git a/zh-cn/application-dev/security/permission-group-list.md b/zh-cn/application-dev/security/permission-group-list.md
new file mode 100644
index 0000000000000000000000000000000000000000..0d6d743668c8bf5074babc347cf7abd49611299c
--- /dev/null
+++ b/zh-cn/application-dev/security/permission-group-list.md
@@ -0,0 +1,90 @@
+# 应用权限组列表
+
+在申请目标权限前,建议开发者先阅读[访问控制开发概述-权限组和子权限](accesstoken-overview.md#权限组和子权限),了解权限组和子权限的概念,再合理申请对应的权限组。
+
+当前系统支持权限组如下所示,各子权限的含义请查阅[应用权限列表](permission-list.md)。
+
+## 位置信息
+
+- ohos.permission.LOCATION_IN_BACKGROUND
+- ohos.permission.LOCATION
+- ohos.permission.APPROXIMATELY_LOCATION
+
+## 相机
+
+- ohos.permission.CAMERA
+
+## 麦克风
+
+- ohos.permission.MICROPHONE
+
+## 媒体和文件
+
+- ohos.permission.MEDIA_LOCATION
+- ohos.permission.READ_MEDIA
+- ohos.permission.WRITE_MEDIA
+
+## 日历
+
+- ohos.permission.READ_CALENDAR
+- ohos.permission.WRITE_CALENDAR
+- ohos.permission.READ_WHOLE_CALENDAR
+- ohos.permission.WRITE_WHOLE_CALENDAR
+
+## 健身运动
+
+- ohos.permission.ACTIVITY_MOTION
+
+## 身体传感器
+
+- ohos.permission.READ_HEALTH_DATA
+
+## 多设备协同
+
+- ohos.permission.DISTRIBUTED_DATASYNC
+
+## 电话
+
+- ohos.permission.ANSWER_CALL
+- ohos.permission.MANAGE_VOICEMAIL
+
+## 通讯录
+
+- ohos.permission.READ_CONTACTS
+- ohos.permission.WRITE_CONTACTS
+
+## 通话记录
+
+- ohos.permission.READ_CALL_LOG
+- ohos.permission.WRITE_CALL_LOG
+
+## 信息
+
+- ohos.permission.READ_CELL_MESSAGES
+- ohos.permission.READ_MESSAGES
+- ohos.permission.RECEIVE_MMS
+- ohos.permission.RECEIVE_SMS
+- ohos.permission.RECEIVE_WAP_MESSAGES
+- ohos.permission.SEND_MESSAGES
+
+## 音乐和音频
+
+- ohos.permission.WRITE_AUDIO
+- ohos.permission.READ_AUDIO
+
+## 文件
+
+- ohos.permission.READ_DOCUMENT
+- ohos.permission.WRITE_DOCUMENT
+- ohos.permission.READ_MEDIA
+- ohos.permission.WRITE_MEDIA
+
+## 图片和视频
+
+- ohos.permission.WRITE_IMAGEVIDEO
+- ohos.permission.READ_IMAGEVIDEO
+- ohos.permission.MEDIA_LOCATION
+
+## 广告跟踪
+
+- ohos.permission.APP_TRACKING_CONSENT
diff --git a/zh-cn/application-dev/security/permission-list.md b/zh-cn/application-dev/security/permission-list.md
index d93dd37619d406df2ab4b487094eea76b69380c0..32066aebf781689cccfef57c306d50ac8e597fb2 100644
--- a/zh-cn/application-dev/security/permission-list.md
+++ b/zh-cn/application-dev/security/permission-list.md
@@ -593,6 +593,7 @@
**ACL使能**:TRUE
**起始版本**:7
+
## ohos.permission.ACCELEROMETER
允许应用读取加速度传感器的数据。