1# @ohos.abilityAccessCtrl (程序访问控制管理) 2 3程序访问控制提供程序的权限管理能力,包括鉴权、授权和取消授权等。 4 5> **说明:** 6> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。 7 8## 导入模块 9 10```js 11import abilityAccessCtrl from '@ohos.abilityAccessCtrl' 12``` 13 14## abilityAccessCtrl.createAtManager 15 16createAtManager(): AtManager 17 18访问控制管理:获取访问控制模块对象。 19 20**系统能力:** SystemCapability.Security.AccessToken 21 22 23**返回值:** 24 25| 类型 | 说明 | 26| -------- | -------- | 27| [AtManager](#atmanager) | 获取访问控制模块的实例。 | 28 29**示例:** 30 31```js 32let atManager = abilityAccessCtrl.createAtManager(); 33``` 34 35## AtManager 36 37管理访问控制模块的实例。 38 39### checkAccessToken<sup>9+</sup> 40 41checkAccessToken(tokenID: number, permissionName: Permissions): Promise<GrantStatus> 42 43校验应用是否授予权限。使用Promise异步回调。 44 45**系统能力:** SystemCapability.Security.AccessToken 46 47**参数:** 48 49| 参数名 | 类型 | 必填 | 说明 | 50| -------- | ------------------- | ---- | ------------------------------------------ | 51| tokenID | number | 是 | 要校验的目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 | 52| permissionName | Permissions | 是 | 需要校验的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | 53 54**返回值:** 55 56| 类型 | 说明 | 57| :------------ | :---------------------------------- | 58| Promise<GrantStatus> | Promise对象。返回授权状态结果。 | 59 60**错误码:** 61 62以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)。 63 64| 错误码ID | 错误信息 | 65| -------- | -------- | 66| 12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256. | 67 68**示例:** 69 70```js 71import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 72 73let atManager = abilityAccessCtrl.createAtManager(); 74let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取 75try { 76 atManager.checkAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS").then((data) => { 77 console.log(`checkAccessToken success, data->${JSON.stringify(data)}`); 78 }).catch((err) => { 79 console.log(`checkAccessToken fail, err->${JSON.stringify(err)}`); 80 }); 81} catch(err) { 82 console.log(`catch err->${JSON.stringify(err)}`); 83} 84``` 85 86### verifyAccessTokenSync<sup>9+</sup> 87 88verifyAccessTokenSync(tokenID: number, permissionName: Permissions): GrantStatus 89 90校验应用是否被授予权限,同步返回结果。 91 92**系统能力:** SystemCapability.Security.AccessToken 93 94**参数:** 95 96| 参数名 | 类型 | 必填 | 说明 | 97| -------- | ------------------- | ---- | ------------------------------------------ | 98| tokenID | number | 是 | 要校验应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 | 99| permissionName | Permissions | 是 | 需要校验的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | 100 101**返回值:** 102 103| 类型 | 说明 | 104| :------------ | :---------------------------------- | 105| [GrantStatus](#grantstatus) | 枚举实例,返回授权状态。 | 106 107**错误码:** 108 109以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)。 110 111| 错误码ID | 错误信息 | 112| -------- | -------- | 113| 12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256. | 114 115**示例:** 116 117```js 118let atManager = abilityAccessCtrl.createAtManager(); 119let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取 120let data = atManager.verifyAccessTokenSync(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS"); 121console.log(`data->${JSON.stringify(data)}`); 122``` 123 124### grantUserGrantedPermission 125 126grantUserGrantedPermission(tokenID: number, permissionName: Permissions, permissionFlags: number): Promise<void> 127 128授予应用user grant权限。使用Promise异步回调。 129 130**系统接口:** 此接口为系统接口。 131 132**需要权限:** ohos.permission.GRANT_SENSITIVE_PERMISSIONS,仅系统应用可用。 133 134**系统能力:** SystemCapability.Security.AccessToken 135 136**参数:** 137 138| 参数名 | 类型 | 必填 | 说明 | 139| --------- | ------------------- | ---- | ------------------------------------------------------------ | 140| tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 | 141| permissionName | Permissions | 是 | 被授予的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | 142| permissionFlags | number | 是 | 授权选项<br>- 0表示权限未经过用户主动设置。<br>- 1表示当次用户若选择禁止该权限,下次权限弹窗仍可以弹出申请用户授权。<br>- 2表示当次用户若选择禁止该权限,下次不会再弹出权限弹窗,需要用户在setting的权限管理中进行授权。<br>- 4表示当次权限设置为系统授权,用户不可更改这个权限授权状态。 | 143 144**返回值:** 145 146| 类型 | 说明 | 147| :------------ | :---------------------------------- | 148| Promise<void> | Promise对象。无返回结果的Promise对象。 | 149 150**错误码:** 151 152以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)。 153 154| 错误码ID | 错误信息 | 155| -------- | -------- | 156| 12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256, or the flags value is invalid. | 157| 12100002 | The specified tokenID does not exist. | 158| 12100003 | The specified permission does not exist. | 159| 12100006 | The application specified by the tokenID is not allowed to be granted with the specified permission. Either the application is a sandbox or the tokenID is from a remote device. | 160| 12100007 | Service is abnormal. | 161 162**示例:** 163 164```js 165import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 166 167let atManager = abilityAccessCtrl.createAtManager(); 168let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取 169let permissionFlags = 1; 170try { 171 atManager.grantUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlags).then(() => { 172 console.log('grantUserGrantedPermission success'); 173 }).catch((err) => { 174 console.log(`grantUserGrantedPermission fail, err->${JSON.stringify(err)}`); 175 }); 176} catch(err) { 177 console.log(`catch err->${JSON.stringify(err)}`); 178} 179``` 180 181### grantUserGrantedPermission 182 183grantUserGrantedPermission(tokenID: number, permissionName: Permissions, permissionFlags: number, callback: AsyncCallback<void>): void 184 185授予应用user grant权限。使用callback异步回调。 186 187**系统接口:** 此接口为系统接口。 188 189**需要权限:** ohos.permission.GRANT_SENSITIVE_PERMISSIONS,仅系统应用可用。 190 191**系统能力:** SystemCapability.Security.AccessToken 192 193**参数:** 194 195| 参数名 | 类型 | 必填 | 说明 | 196| --------- | ------------------- | ---- | ------------------------------------------------------------ | 197| tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。| 198| permissionName | Permissions | 是 | 被授予的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | 199| permissionFlags | number | 是 | 授权选项<br>- 0表示权限未经过用户主动设置。<br>- 1表示当次用户若选择禁止该权限,下次权限弹窗仍可以弹出申请用户授权。<br>- 2表示当次用户若选择禁止该权限,下次不会再弹出权限弹窗,需要用户在setting的权限管理中进行授权。<br>- 4表示当次权限设置为系统授权,用户不可更改这个权限授权状态。 | 200| callback | AsyncCallback<void> | 是 | 授予应用user grant权限。当授予权限成功时,err为undefine;否则为错误对象。 | 201 202**错误码:** 203 204以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)。 205 206| 错误码ID | 错误信息 | 207| -------- | -------- | 208| 12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256, or the flags value is invalid. | 209| 12100002 | TokenId does not exist. | 210| 12100003 | Permission does not exist. | 211| 12100006 | The application specified by the tokenID is not allowed to be granted with the specified permission. Either the application is a sandbox or the tokenID is from a remote device. | 212| 12100007 | Service is abnormal. | 213 214**示例:** 215 216```js 217import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 218 219let atManager = abilityAccessCtrl.createAtManager(); 220let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取 221let permissionFlags = 1; 222try { 223 atManager.grantUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlags, (err, data) => { 224 if (err) { 225 console.log(`grantUserGrantedPermission fail, err->${JSON.stringify(err)}`); 226 } else { 227 console.log('grantUserGrantedPermission success'); 228 } 229 }); 230} catch(err) { 231 console.log(`catch err->${JSON.stringify(err)}`); 232} 233``` 234 235### revokeUserGrantedPermission 236 237revokeUserGrantedPermission(tokenID: number, permissionName: Permissions, permissionFlags: number): Promise<void> 238 239撤销应用user grant权限。使用Promise异步回调。 240 241**系统接口:** 此接口为系统接口。 242 243**需要权限:** ohos.permission.REVOKE_SENSITIVE_PERMISSIONS,仅系统应用可用。 244 245**系统能力:** SystemCapability.Security.AccessToken 246 247**参数:** 248 249| 参数名 | 类型 | 必填 | 说明 | 250| --------- | ------------------- | ---- | ------------------------------------------------------------ | 251| tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 | 252| permissionName | Permissions | 是 | 被撤销的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | 253| permissionFlags | number | 是 | 授权选项<br>- 0表示权限未经过用户主动设置。<br>- 1表示当次用户若选择禁止该权限,下次权限弹窗仍可以弹出申请用户授权。<br>- 2表示当次用户若选择禁止该权限,下次不会再弹出权限弹窗,需要用户在setting的权限管理中进行授权。<br>- 4表示当次权限设置为系统授权,用户不可更改这个权限授权状态。 | 254 255**返回值:** 256 257| 类型 | 说明 | 258| :------------ | :---------------------------------- | 259| Promise<void> | Promise对象。无返回结果的Promise对象。 | 260 261**错误码:** 262 263以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)。 264 265| 错误码ID | 错误信息 | 266| -------- | -------- | 267| 12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256, or the flags value is invalid. | 268| 12100002 | The specified tokenID does not exist. | 269| 12100003 | The specified permission does not exist. | 270| 12100006 | The application specified by the tokenID is not allowed to be revoked with the specified permission. Either the application is a sandbox or the tokenID is from a remote device. | 271| 12100007 | Service is abnormal. | 272 273**示例:** 274 275```js 276import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 277 278let atManager = abilityAccessCtrl.createAtManager(); 279let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取 280let permissionFlags = 1; 281try { 282 atManager.revokeUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlags).then(() => { 283 console.log('revokeUserGrantedPermission success'); 284 }).catch((err) => { 285 console.log(`revokeUserGrantedPermission fail, err->${JSON.stringify(err)}`); 286 }); 287} catch(err) { 288 console.log(`catch err->${JSON.stringify(err)}`); 289} 290``` 291 292### revokeUserGrantedPermission 293 294revokeUserGrantedPermission(tokenID: number, permissionName: Permissions, permissionFlags: number, callback: AsyncCallback<void>): void 295 296撤销应用user grant权限。使用callback异步回调。 297 298**系统接口:** 此接口为系统接口。 299 300**需要权限:** ohos.permission.REVOKE_SENSITIVE_PERMISSIONS,仅系统应用可用。 301 302**系统能力:** SystemCapability.Security.AccessToken 303 304**参数:** 305 306| 参数名 | 类型 | 必填 | 说明 | 307| --------- | ------------------- | ---- | ------------------------------------------------------------ | 308| tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 | 309| permissionName | Permissions | 是 | 被撤销的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | 310| permissionFlags | number | 是 | 授权选项<br>- 0表示权限未经过用户主动设置。<br>- 1表示当次用户若选择禁止该权限,下次权限弹窗仍可以弹出申请用户授权。<br>- 2表示当次用户若选择禁止该权限,下次不会再弹出权限弹窗,需要用户在setting的权限管理中进行授权。<br>- 4表示当次权限设置为系统授权,用户不可更改这个权限授权状态。 | 311| callback | AsyncCallback<void> | 是 | 撤销应用user grant权限。当撤销权限成功时,err为undefine;否则为错误对象。 | 312 313**错误码:** 314 315以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)。 316 317| 错误码ID | 错误信息 | 318| -------- | -------- | 319| 12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256, or the flags value is invalid. | 320| 12100002 | TokenId does not exist. | 321| 12100003 | Permission does not exist. | 322| 12100006 | The application specified by the tokenID is not allowed to be revoked with the specified permission. Either the application is a sandbox or the tokenID is from a remote device. | 323| 12100007 | Service is abnormal. | 324 325**示例:** 326 327```js 328import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 329 330let atManager = abilityAccessCtrl.createAtManager(); 331let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取 332let permissionFlags = 1; 333try { 334 atManager.revokeUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlags, (err, data) => { 335 if (err) { 336 console.log(`revokeUserGrantedPermission fail, err->${JSON.stringify(err)}`); 337 } else { 338 console.log('revokeUserGrantedPermission success'); 339 } 340 }); 341} catch(err) { 342 console.log(`catch err->${JSON.stringify(err)}`); 343} 344``` 345 346### getPermissionFlags 347 348getPermissionFlags(tokenID: number, permissionName: Permissions): Promise<number> 349 350获取指定应用的指定权限的flag。使用Promise异步回调。 351 352**系统接口:** 此接口为系统接口。 353 354**需要权限:** ohos.permission.GET_SENSITIVE_PERMISSIONS or ohos.permission.GRANT_SENSITIVE_PERMISSIONS or ohos.permission.REVOKE_SENSITIVE_PERMISSIONS,仅系统应用可用。 355 356**系统能力:** SystemCapability.Security.AccessToken 357 358**参数:** 359 360| 参数名 | 类型 | 必填 | 说明 | 361| --------- | ------------------- | ---- | ------------------------------------------------------------ | 362| tokenID | number | 是 | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 | 363| permissionName | Permissions | 是 | 查询的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | 364 365**返回值:** 366 367| 类型 | 说明 | 368| :------------ | :---------------------------------- | 369| Promise<number> | Promise对象。返回查询结果。 | 370 371**错误码:** 372 373以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)。 374 375| 错误码ID | 错误信息 | 376| -------- | -------- | 377| 12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256. | 378| 12100002 | The specified tokenID does not exist. | 379| 12100003 | The specified permission does not exist. | 380| 12100006 | The operation is not allowed. Either the application is a sandbox or the tokenID is from a remote device. | 381| 12100007 | Service is abnormal. | 382 383**示例:** 384 385```js 386import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 387 388let atManager = abilityAccessCtrl.createAtManager(); 389let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取 390try { 391 atManager.getPermissionFlags(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS").then((data) => { 392 console.log(`getPermissionFlags success, data->${JSON.stringify(data)}`); 393 }).catch((err) => { 394 console.log(`getPermissionFlags fail, err->${JSON.stringify(err)}`); 395 }); 396} catch(err) { 397 console.log(`catch err->${JSON.stringify(err)}`); 398} 399``` 400 401### getVersion<sup>9+</sup> 402 403getVersion(): Promise<number> 404 405获取当前权限管理的数据版本。使用Promise异步回调。 406 407**系统接口:** 此接口为系统接口。 408 409**系统能力:** SystemCapability.Security.AccessToken 410 411**返回值:** 412 413| 类型 | 说明 | 414| :------------ | :---------------------------------- | 415| Promise<number> | Promise对象。返回查询到的版本号。 | 416 417**示例:** 418 419```js 420let atManager = abilityAccessCtrl.createAtManager(); 421let promise = atManager.getVersion(); 422promise.then(data => { 423 console.log(`promise: data->${JSON.stringify(data)}`); 424}); 425``` 426 427### on<sup>9+</sup> 428 429on(type: 'permissionStateChange', tokenIDList: Array<number>, permissionList: Array<Permissions>, callback: Callback<PermissionStateChangeInfo>): void; 430 431订阅指定tokenId列表与权限列表的权限状态变更事件。 432 433**系统接口:** 此接口为系统接口。 434 435**需要权限:** ohos.permission.GET_SENSITIVE_PERMISSIONS,仅系统应用可用。 436 437**系统能力:** SystemCapability.Security.AccessToken 438 439**参数:** 440 441| 参数名 | 类型 | 必填 | 说明 | 442| ------------------ | --------------------- | ---- | ------------------------------------------------------------ | 443| type | string | 是 | 订阅事件类型,固定为'permissionStateChange',权限状态变更事件。 | 444| tokenIDList | Array<number> | 是 | 订阅的tokenId列表,为空时表示订阅所有的应用的权限状态变化。 | 445| permissionList | Array<Permissions> | 是 | 订阅的权限名列表,为空时表示订阅所有的权限状态变化。 | 446| callback | Callback<[PermissionStateChangeInfo](#permissionstatechangeinfo9)> | 是 | 订阅指定tokenId与指定权限名状态变更事件的回调。| 447 448**错误码:** 449 450以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)。 451 452| 错误码ID | 错误信息 | 453| -------- | -------- | 454| 12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256. | 455| 12100004 | The interface is called repeatedly with the same input. | 456| 12100005 | The registration time has exceeded the limitation. | 457| 12100007 | Service is abnormal. | 458| 12100008 | Out of memory. | 459 460**示例:** 461 462```js 463import {Permissions} from '@ohos.abilityAccessCtrl'; 464import bundleManager from '@ohos.bundle.bundleManager'; 465 466let atManager = abilityAccessCtrl.createAtManager(); 467let appInfo = bundleManager.getApplicationInfoSync('com.example.myapplication', 0, 100); 468let tokenIDList: Array<number> = [appInfo.accessTokenId]; 469let permissionList: Array<Permissions> = ["ohos.permission.DISTRIBUTED_DATASYNC"]; 470try { 471 atManager.on('permissionStateChange', tokenIDList, permissionList, (data) => { 472 console.debug("receive permission state change, data:" + JSON.stringify(data)); 473 }); 474} catch(err) { 475 console.log(`catch err->${JSON.stringify(err)}`); 476} 477``` 478 479### off<sup>9+</sup> 480 481off(type: 'permissionStateChange', tokenIDList: Array<number>, permissionList: Array<Permissions>, callback?: Callback<PermissionStateChangeInfo>): void; 482 483取消订阅指定tokenId列表与权限列表的权限状态变更事件,使用callback回调异步返回结果。 484 485**系统接口:** 此接口为系统接口。 486 487**需要权限:** ohos.permission.GET_SENSITIVE_PERMISSIONS,仅系统应用可用。 488 489**系统能力:** SystemCapability.Security.AccessToken 490 491**参数:** 492 493| 参数名 | 类型 | 必填 | 说明 | 494| ------------------ | --------------------- | ---- | ------------------------------------------------------------ | 495| type | string | 是 | 订阅事件类型,固定为'permissionStateChange',权限状态变更事件。 | 496| tokenIDList | Array<number> | 是 | 订阅的tokenId列表,为空时表示订阅所有的应用的权限状态变化,必须与on的输入一致。 | 497| permissionList | Array<Permissions> | 是 | 订阅的权限名列表,为空时表示订阅所有的权限状态变化,必须与on的输入一致。 | 498| callback | Callback<[PermissionStateChangeInfo](#permissionstatechangeinfo9)> | 否 | 取消订阅指定tokenId与指定权限名状态变更事件的回调。| 499 500**错误码:** 501 502以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)。 503 504| 错误码ID | 错误信息 | 505| -------- | -------- | 506| 12100001 | The parameter is invalid. The tokenID in list is all invalid, or the permissionName in list is all invalid. | 507| 12100004 | The interface is not used together with "on". | 508| 12100007 | Service is abnormal. | 509| 12100008 | Out of memory. | 510 511**示例:** 512 513```js 514import {Permissions} from '@ohos.abilityAccessCtrl'; 515import bundleManager from '@ohos.bundle.bundleManager'; 516 517let atManager = abilityAccessCtrl.createAtManager(); 518let appInfo = bundleManager.getApplicationInfoSync('com.example.myapplication', 0, 100); 519let tokenIDList: Array<number> = [appInfo.accessTokenId]; 520let permissionList: Array<Permissions> = ["ohos.permission.DISTRIBUTED_DATASYNC"]; 521try { 522 atManager.off('permissionStateChange', tokenIDList, permissionList); 523} catch(err) { 524 console.log(`catch err->${JSON.stringify(err)}`); 525} 526``` 527 528### verifyAccessToken<sup>9+</sup> 529 530verifyAccessToken(tokenID: number, permissionName: Permissions): Promise<GrantStatus> 531 532校验应用是否授予权限。使用Promise异步回调。 533 534> **说明:** 535> 536> 建议使用[checkAccessToken](#checkaccesstoken9)替代。 537 538**系统能力:** SystemCapability.Security.AccessToken 539 540**参数:** 541 542| 参数名 | 类型 | 必填 | 说明 | 543| -------- | ------------------- | ---- | ------------------------------------------ | 544| tokenID | number | 是 | 要校验的目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 | 545| permissionName | Permissions | 是 | 需要校验的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | 546 547**返回值:** 548 549| 类型 | 说明 | 550| :------------ | :---------------------------------- | 551| Promise<GrantStatus> | Promise对象。返回授权状态结果。 | 552 553**示例:** 554 555```js 556import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 557 558let atManager = abilityAccessCtrl.createAtManager(); 559let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取 560let promise = atManager.verifyAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS"); 561promise.then(data => { 562 console.log(`promise: data->${JSON.stringify(data)}`); 563}); 564``` 565 566### requestPermissionsFromUser<sup>9+</sup> 567 568requestPermissionsFromUser(context: Context, permissionList: Array<Permissions>, requestCallback: AsyncCallback<PermissionRequestResult>) : void; 569 570用于UIAbility拉起弹框请求用户授权。使用callback异步回调。 571> **说明:** 572> 573> 非UIAbility不支持调用本函数。 574 575**模型约束**:此接口仅可在Stage模型下使用。 576 577**系统能力**: SystemCapability.Security.AccessToken 578 579**参数:** 580 581| 参数名 | 类型 | 必填 | 说明 | 582| -------- | -------- | -------- | -------- | 583| context | Context | 是 | 请求权限的UIAbility的UIAbilityContext。 | 584| permissionList | Array<Permissions> | 是 | 权限名列表,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | 585| callback | AsyncCallback<[PermissionRequestResult](js-apis-permissionrequestresult.md)> | 是 | 回调函数,返回接口调用是否成功的结果。 | 586 587**错误码:** 588 589以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)。 590 591| 错误码ID | 错误信息 | 592| -------- | -------- | 593| 12100001 | The parameter is invalid. The context is invalid when it does not belong to the application itself. | 594 595**示例:** 596 597 ```js 598import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 599let atManager = abilityAccessCtrl.createAtManager(); 600try { 601 atManager.requestPermissionsFromUser(this.context, ["ohos.permission.CAMERA"], (err, data)=>{ 602 console.info("data:" + JSON.stringify(data)); 603 console.info("data permissions:" + data.permissions); 604 console.info("data authResults:" + data.authResults); 605 }); 606} catch(err) { 607 console.log(`catch err->${JSON.stringify(err)}`); 608} 609 ``` 610 611### requestPermissionsFromUser<sup>9+</sup> 612 613requestPermissionsFromUser(context: Context, permissionList: Array<Permissions>) : Promise<PermissionRequestResult>; 614 615用于UIAbility拉起弹框请求用户授权。使用promise异步回调。 616 617> **说明:** 618> 619> 非UIAbility不支持调用本函数。 620 621**模型约束**:此接口仅可在Stage模型下使用。 622 623**系统能力**: SystemCapability.Security.AccessToken 624 625**参数:** 626 627| 参数名 | 类型 | 必填 | 说明 | 628| -------- | -------- | -------- | -------- | 629| context | Context | 是 | 请求权限的UIAbility的UIAbilityContext。 | 630| permissionList | Array<Permissions> | 是 | 需要校验的权限名称,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | 631 632**返回值:** 633 634| 类型 | 说明 | 635| -------- | -------- | 636| Promise<[PermissionRequestResult](js-apis-permissionrequestresult.md)> | 返回一个Promise,包含接口的结果。 | 637 638**错误码:** 639 640以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)。 641 642| 错误码ID | 错误信息 | 643| -------- | -------- | 644| 12100001 | The parameter is invalid. The context is invalid when it does not belong to the application itself. | 645 646**示例:** 647 648 ```js 649import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 650let atManager = abilityAccessCtrl.createAtManager(); 651try { 652 atManager.requestPermissionsFromUser(this.context, ["ohos.permission.CAMERA"]).then((data) => { 653 console.info("data:" + JSON.stringify(data)); 654 console.info("data permissions:" + data.permissions); 655 console.info("data authResults:" + data.authResults); 656 }).catch((err) => { 657 console.info("data:" + JSON.stringify(err)); 658 }) 659} catch(err) { 660 console.log(`catch err->${JSON.stringify(err)}`); 661} 662 ``` 663 664### verifyAccessToken<sup>(deprecated)</sup> 665 666verifyAccessToken(tokenID: number, permissionName: string): Promise<GrantStatus> 667 668校验应用是否授予权限。使用Promise异步回调。 669 670> **说明:** 671> 672> 从API version 9开始不再维护,建议使用[checkAccessToken](#checkaccesstoken9)替代。 673 674**系统能力:** SystemCapability.Security.AccessToken 675 676**参数:** 677 678| 参数名 | 类型 | 必填 | 说明 | 679| -------- | ------------------- | ---- | ------------------------------------------ | 680| tokenID | number | 是 | 要校验的目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。 | 681| permissionName | string | 是 | 需要校验的权限名称。 | 682 683**返回值:** 684 685| 类型 | 说明 | 686| :------------ | :---------------------------------- | 687| Promise<GrantStatus> | Promise对象。返回授权状态结果。 | 688 689**示例:** 690 691```js 692import abilityAccessCtrl from '@ohos.abilityAccessCtrl'; 693 694let atManager = abilityAccessCtrl.createAtManager(); 695let tokenID = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取 696let promise = atManager.verifyAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS"); 697promise.then(data => { 698 console.log(`promise: data->${JSON.stringify(data)}`); 699}); 700``` 701 702### GrantStatus 703 704表示授权状态的枚举。 705 706**系统能力:** SystemCapability.Security.AccessToken 707 708| 名称 | 值 | 说明 | 709| ------------------ | ----- | ----------- | 710| PERMISSION_DENIED | -1 | 表示未授权。 | 711| PERMISSION_GRANTED | 0 | 表示已授权。 | 712 713### PermissionStateChangeType<sup>9+</sup> 714 715表示权限授权状态变化操作类型的枚举。 716 717**系统接口:** 此接口为系统接口。 718 719**系统能力:** SystemCapability.Security.AccessToken 720 721| 名称 | 值 | 说明 | 722| ----------------------- | ------ | ----------------- | 723| PERMISSION_REVOKED_OPER | 0 | 表示权限取消操作。 | 724| PERMISSION_GRANTED_OPER | 1 | 表示权限授予操作。 | 725 726### PermissionStateChangeInfo<sup>9+</sup> 727 728表示某次权限授权状态变化的详情。 729 730**系统接口:** 此接口为系统接口。 731 732**系统能力:** SystemCapability.Security.AccessToken 733 734| 名称 | 类型 | 可读 | 可写 | 说明 | 735| -------------- | ------------------------- | ---- | ---- | ------------------ | 736| change | [PermissionStateChangeType](#permissionstatechangetype9) | 是 | 否 | 权限授权状态变化类型。 | 737| tokenID | number | 是 | 否 | 被订阅的应用身份标识。 | 738| permissionName | Permissions | 是 | 否 | 当前授权状态发生变化的权限名,合法的权限名取值可在[系统权限定义列表](../../security/permission-list.md)中查询。 | 739