应用权限保护对象
当应用访问操作目标对象,目标对象对应用进行权限检查,如果没有权限访问操作被拒绝
应用权限等级说明
应用权限的等级说明====应用权限的申请优先级
APL三个等级 (应用APL等级不允许配置为system_core。)
|| ===system-core (操作系统核心能力) ——》暂不向任何三方应用开放
APL =======|| ===system-basic(系统基础服务)——》系统设置,身份认证
|| ===normal (普通应用)——》数据/功能
授权方式:权限类型
权限组和子权限
减少系统弹出的权限弹窗数量,优化交互体验,系统将逻辑紧密相关的user_grant权限组合在一起,形成多个权限组。
当应用请求权限时,同一个权限组的权限将会在一个弹窗内一起请求用户授权。权限组中的某个权限,称之为该权限组的子权限。
权限组和权限的归属关系并不是固定不变的,一个权限所属的权限组有可能发生变化。
应用申请权限的方式
配置声明权限
-
在 module.json5 中添加权限说明
注意:权限为 user_grant 时,还需添加授权原因。
2. 添加 reason 权限使用理由
- 当申请的权限为 user_grant 权限时必填,并且需要进行多语种适配。
- 参考句式:用于某事,如:(麦克风)用于录制加密视频和音频。
检查当前权限是否开启
static async checkPermissionGrant(permissionName: Permissions[]): Promise<boolean> {
// 获取应用程序的accessTokenID
let tokenId: number = 0;
try {
const bundleInfo: bundleManager.BundleInfo =
await bundleManager.getBundleInfoForSelf(bundleManager.BundleFlag.GET_BUNDLE_INFO_WITH_APPLICATION);
const appInfo: bundleManager.ApplicationInfo = bundleInfo.appInfo;
tokenId = appInfo.accessTokenId;
} catch (error) {
const err: BusinessError = error as BusinessError;
console.error(`Failed to get bundle info for self. Code is ${err.code}, message is ${err.message}`);