1# @ohos.abilityAccessCtrl (Application Access Control) 2 3<!--Kit: Ability Kit--> 4<!--Subsystem: Security--> 5<!--Owner: @xia-bubai--> 6<!--SE: @linshuqing; @hehehe-li--> 7<!--TSE: @leiyuqian--> 8 9The **abilityAccessCtrl** module provides APIs for application permission management, including authentication and authorization. 10 11> **NOTE** 12> The initial APIs of this module are supported since API version 8. Newly added APIs will be marked with a superscript to indicate their earliest API version. 13 14## Modules to Import 15 16```ts 17import { abilityAccessCtrl } from '@kit.AbilityKit'; 18``` 19 20## abilityAccessCtrl.createAtManager 21 22createAtManager(): AtManager 23 24Creates an **AtManager** instance for application access control. 25 26**Atomic service API**: This API can be used in atomic services since API version 11. 27 28**System capability**: SystemCapability.Security.AccessToken 29 30 31**Return value** 32 33| Type| Description| 34| -------- | -------- | 35| [AtManager](#atmanager) | **AtManager** instance created.| 36 37**Example** 38 39```ts 40let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 41``` 42 43## AtManager 44 45Provides APIs for application access control. 46 47### checkAccessToken<sup>9+</sup> 48 49checkAccessToken(tokenID: number, permissionName: Permissions): Promise<GrantStatus> 50 51Checks whether the user has granted the permission. This API uses a promise to return the result. 52 53**Atomic service API**: This API can be used in atomic services since API version 11. 54 55**System capability**: SystemCapability.Security.AccessToken 56 57**Parameters** 58 59| Name | Type | Mandatory| Description | 60| -------- | ------------------- | ---- | ------------------------------------------ | 61| tokenID | number | Yes | Identifier of the target application, which is the value of **accessTokenId** contained in [ApplicationInfo](js-apis-bundleManager-applicationInfo.md).| 62| permissionName | Permissions | Yes | Permission to verify. For details about the permission, see [Application Permissions](../../security/AccessToken/app-permissions.md).| 63 64**Return value** 65 66| Type | Description | 67| :------------ | :---------------------------------- | 68| Promise<[GrantStatus](#grantstatus)> | Promise used to return the authorization result.| 69 70**Error codes** 71 72For details about the error codes, see [Access Control Error Codes](errorcode-access-token.md). 73 74| ID| Error Message| 75| -------- | -------- | 76| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. | 77| 12100001 | Invalid parameter. The tokenID is 0, or the permissionName exceeds 256 characters. | 78 79**Example** 80 81```ts 82import { abilityAccessCtrl } from '@kit.AbilityKit'; 83import { BusinessError } from '@kit.BasicServicesKit'; 84 85let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 86let tokenID: number = 0; // Use bundleManager.getApplicationInfo() to obtain the token ID for a system application, and use bundleManager.getBundleInfoForSelf() to obtain the token ID for a third-party application. 87atManager.checkAccessToken(tokenID, 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS').then((data: abilityAccessCtrl.GrantStatus) => { 88 console.log(`checkAccessToken success, data->${JSON.stringify(data)}`); 89}).catch((err: BusinessError) => { 90 console.error(`checkAccessToken fail, err->${JSON.stringify(err)}`); 91}); 92``` 93 94### checkAccessTokenSync<sup>10+</sup> 95 96checkAccessTokenSync(tokenID: number, permissionName: Permissions): GrantStatus 97 98Verifies whether a permission is granted to an application. This API returns the result synchronously. 99 100**Atomic service API**: This API can be used in atomic services since API version 11. 101 102**System capability**: SystemCapability.Security.AccessToken 103 104**Parameters** 105 106| Name | Type | Mandatory| Description | 107| -------- | ------------------- | ---- | ------------------------------------------ | 108| tokenID | number | Yes | Identifier of the target application, which is the value of **accessTokenId** contained in [ApplicationInfo](js-apis-bundleManager-applicationInfo.md).| 109| permissionName | Permissions | Yes | Permission to verify. For details about the permission, see [Application Permissions](../../security/AccessToken/app-permissions.md).| 110 111**Return value** 112 113| Type | Description | 114| :------------ | :---------------------------------- | 115| [GrantStatus](#grantstatus) | Permission grant state.| 116 117**Error codes** 118 119For details about the error codes, see [Access Control Error Codes](errorcode-access-token.md). 120 121| ID| Error Message| 122| -------- | -------- | 123| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. | 124| 12100001 | Invalid parameter. The tokenID is 0, or the permissionName exceeds 256 characters. | 125 126**Example** 127 128```ts 129import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit'; 130 131let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 132let tokenID: number = 0; // Use bundleManager.getApplicationInfo() to obtain the token ID for a system application, and use bundleManager.getBundleInfoForSelf() to obtain the token ID for a third-party application. 133let permissionName: Permissions = 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS'; 134let data: abilityAccessCtrl.GrantStatus = atManager.checkAccessTokenSync(tokenID, permissionName); 135console.log(`data->${JSON.stringify(data)}`); 136``` 137 138### on<sup>18+</sup> 139 140on(type: 'selfPermissionStateChange', permissionList: Array<Permissions>, callback: Callback<PermissionStateChangeInfo>): void 141 142Subscribes to changes in the state of the specified permissions for this application. 143 144Multiple callbacks can be registered for the same permission list. 145 146The same callback cannot be registered for overlapping permission lists. 147 148**Atomic service API**: This API can be used in atomic services since API version 18. 149 150**System capability**: SystemCapability.Security.AccessToken 151 152**Parameters** 153 154| Name | Type | Mandatory| Description | 155| ------------------ | --------------------- | ---- | ------------------------------------------------------------ | 156| type | string | Yes | Event type. The value is **'selfPermissionStateChange'**, which indicates the changes in the permission states specific to this application alone. | 157| permissionList | Array<Permissions> | Yes | List of target permissions. If this parameter is not specified, this API will subscribe to state changes of all permissions. For details about the permissions, see [Application Permissions](../../security/AccessToken/app-permissions.md).| 158| callback | Callback<[PermissionStateChangeInfo](#permissionstatechangeinfo18)> | Yes| Callback used to return the permission state change.| 159 160**Error codes** 161 162For details about the error codes, see [Access Control Error Codes](errorcode-access-token.md). 163 164| ID| Error Message| 165| -------- | -------- | 166| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. | 167| 12100001 | Invalid parameter. Possible causes: 1. The permissionList exceeds the size limit; 2. The permissionNames in the list are all invalid. | 168| 12100004 | The API is used repeatedly with the same input. | 169| 12100005 | The registration time has exceeded the limit. | 170| 12100007 | The service is abnormal. | 171 172**Example** 173 174```ts 175import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit'; 176 177let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 178let permissionList: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION']; 179try { 180 atManager.on('selfPermissionStateChange', permissionList, (data: abilityAccessCtrl.PermissionStateChangeInfo) => { 181 console.log('receive permission state change, data:' + JSON.stringify(data)); 182 }); 183} catch(err) { 184 console.error(`catch err->${JSON.stringify(err)}`); 185} 186``` 187### off<sup>18+</sup> 188 189off(type: 'selfPermissionStateChange', permissionList: Array<Permissions>, callback?: Callback<PermissionStateChangeInfo>): void 190 191Unsubscribes from changes in the state of the specified permissions for this application. 192 193If **callback** is not specified, this API will unregister all callbacks for **permissionList**. 194 195**Atomic service API**: This API can be used in atomic services since API version 18. 196 197**System capability**: SystemCapability.Security.AccessToken 198 199**Parameters** 200 201| Name | Type | Mandatory| Description | 202| ------------------ | --------------------- | ---- | ------------------------------------------------------------ | 203| type | string | Yes | Event type. The value is **'selfPermissionStateChange'**, which indicates the changes in the permission states specific to this application alone. | 204| permissionList | Array<Permissions> | Yes | List of target permissions. The value must be the same as that in **on()**. If this parameter is not specified, this API will unsubscribe from state changes for all permissions. For details about the permissions, see [Application Permissions](../../security/AccessToken/app-permissions.md).| 205| callback | Callback<[PermissionStateChangeInfo](#permissionstatechangeinfo18)> | No| Callback to unregister.| 206 207**Error codes** 208 209For details about the error codes, see [Access Control Error Codes](errorcode-access-token.md). 210 211| ID| Error Message| 212| -------- | -------- | 213| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. | 214| 12100001 | Invalid parameter. The permissionNames in the list are all invalid. | 215| 12100004 | The API is not used in pair with 'on'. | 216| 12100007 | The service is abnormal. | 217 218**Example** 219 220```ts 221import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit'; 222 223let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 224let permissionList: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION']; 225try { 226 atManager.off('selfPermissionStateChange', permissionList); 227} catch(err) { 228 console.error(`catch err->${JSON.stringify(err)}`); 229} 230``` 231 232### requestPermissionsFromUser<sup>9+</sup> 233 234requestPermissionsFromUser(context: Context, permissionList: Array<Permissions>, requestCallback: AsyncCallback<PermissionRequestResult>): void 235 236Requests user authorization in a dialog box opened by a <!--RP1-->UIAbility<!--RP1End-->. This API uses an asynchronous callback to return the result. 237 238If the user rejects to grant permissions, the dialog box cannot be displayed again. If permission granting is required, the user can manually grant permissions on the **Settings** page or call [requestPermissionOnSetting](#requestpermissiononsetting12) to display the permission settings dialog box for the user to grant permissions. 239 240> **NOTE** 241> 242> Only <!--RP1-->UIAbility<!--RP1End--> is supported. 243 244**Atomic service API**: This API can be used in atomic services since API version 12. 245 246**Model restriction**: This API can be used only in the stage model. 247 248**System capability**: SystemCapability.Security.AccessToken 249 250**Parameters** 251 252| Name| Type| Mandatory| Description| 253| -------- | -------- | -------- | -------- | 254| context | [Context](js-apis-inner-application-context.md) | Yes| Context of the <!--RP1-->UIAbility<!--RP1End--> that requests the permission.| 255| permissionList | Array<Permissions> | Yes| Permissions to request. For details about the permissions, see [Application Permissions](../../security/AccessToken/app-permissions.md).| 256| requestCallback | AsyncCallback<[PermissionRequestResult](js-apis-permissionrequestresult.md)> | Yes| Callback used to return the result.| 257 258**Error codes** 259 260For details about the error codes, see [Access Control Error Codes](errorcode-access-token.md). 261 262| ID| Error Message| 263| -------- | -------- | 264| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. | 265| 12100001 | Invalid parameter. The context is invalid when it does not belong to the application itself. | 266 267**Example** 268 269For details about how to obtain the context in the example, see [Obtaining the Context of UIAbility](../../application-models/uiability-usage.md#obtaining-the-context-of-uiability). 270For details about the process and example of applying for user authorization, see [Requesting User Authorization](../../security/AccessToken/request-user-authorization.md). 271<!--code_no_check--> 272```ts 273import { abilityAccessCtrl, Context, PermissionRequestResult, common } from '@kit.AbilityKit'; 274import { BusinessError } from '@kit.BasicServicesKit'; 275 276let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 277let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext; 278atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult) => { 279 if (err) { 280 console.error(`requestPermissionsFromUser fail, err->${JSON.stringify(err)}`); 281 } else { 282 console.info('data:' + JSON.stringify(data)); 283 console.info('data permissions:' + data.permissions); 284 console.info('data authResults:' + data.authResults); 285 console.info('data dialogShownResults:' + data.dialogShownResults); 286 } 287}); 288``` 289 290### requestPermissionsFromUser<sup>9+</sup> 291 292requestPermissionsFromUser(context: Context, permissionList: Array<Permissions>): Promise<PermissionRequestResult> 293 294Requests user authorization in a dialog box opened by a <!--RP1-->UIAbility<!--RP1End-->. This API uses a promise to return the result. 295 296If the user rejects to grant permissions, the dialog box cannot be displayed again. If permission granting is required, the user can manually grant permissions on the **Settings** page or call [requestPermissionOnSetting](#requestpermissiononsetting12) to display the permission settings dialog box for the user to grant permissions. 297 298> **NOTE** 299> 300> Only <!--RP1-->UIAbility<!--RP1End--> is supported. 301 302**Atomic service API**: This API can be used in atomic services since API version 11. 303 304**Model restriction**: This API can be used only in the stage model. 305 306**System capability**: SystemCapability.Security.AccessToken 307 308**Parameters** 309 310| Name| Type| Mandatory| Description| 311| -------- | -------- | -------- | -------- | 312| context | [Context](js-apis-inner-application-context.md) | Yes| Context of the <!--RP1-->UIAbility<!--RP1End--> that requests the permission.| 313| permissionList | Array<Permissions> | Yes| Permission to verify. For details about the permission, see [Application Permissions](../../security/AccessToken/app-permissions.md).| 314 315**Return value** 316 317| Type| Description| 318| -------- | -------- | 319| Promise<[PermissionRequestResult](js-apis-permissionrequestresult.md)> | Promise used to return the result.| 320 321**Error codes** 322 323For details about the error codes, see [Access Control Error Codes](errorcode-access-token.md). 324 325| ID| Error Message| 326| -------- | -------- | 327| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. | 328| 12100001 | Invalid parameter. The context is invalid when it does not belong to the application itself. | 329 330**Example** 331 332For details about how to obtain the context in the example, see [Obtaining the Context of UIAbility](../../application-models/uiability-usage.md#obtaining-the-context-of-uiability). 333For details about the process and example of applying for user authorization, see [Requesting User Authorization](../../security/AccessToken/request-user-authorization.md). 334<!--code_no_check--> 335```ts 336import { abilityAccessCtrl, Context, PermissionRequestResult, common } from '@kit.AbilityKit'; 337import { BusinessError } from '@kit.BasicServicesKit'; 338 339let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 340let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext; 341atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA']).then((data: PermissionRequestResult) => { 342 console.info('data:' + JSON.stringify(data)); 343 console.info('data permissions:' + data.permissions); 344 console.info('data authResults:' + data.authResults); 345 console.info('data dialogShownResults:' + data.dialogShownResults); 346}).catch((err: BusinessError) => { 347 console.error('data:' + JSON.stringify(err)); 348}); 349``` 350 351### requestPermissionOnSetting<sup>12+</sup> 352 353requestPermissionOnSetting(context: Context, permissionList: Array<Permissions>): Promise<Array<GrantStatus>> 354 355Requests permissions in a **Settings** dialog box. This API displays a permission settings dialog box for a UIAbility/UIExtensionAbility to grant permissions the second time. 356 357Before calling this API, the application must have called [requestPermissionsFromUser](#requestpermissionsfromuser9). If the user grants the permissions required when the authorization dialog box is displayed the first time, calling this API will not display the permission settings dialog box. 358 359> **NOTE** 360> 361> This API supports only UIAbilities/UIExtensionAbilities. 362 363**Atomic service API**: This API can be used in atomic services since API version 12. 364 365**Model restriction**: This API can be used only in the stage model. 366 367**System capability**: SystemCapability.Security.AccessToken 368 369**Parameters** 370 371| Name| Type| Mandatory| Description| 372| -------- | -------- | -------- | -------- | 373| context | [Context](js-apis-inner-application-context.md) | Yes| Context of the UIAbility/UIExtensionAbility that requests the permissions.| 374| permissionList | Array<Permissions> | Yes| Permissions to request. For details about the permissions, see [Application Permission Groups](../../security/AccessToken/app-permission-group-list.md).| 375 376**Return value** 377 378| Type | Description | 379| :------------ | :---------------------------------- | 380| Promise<Array<[GrantStatus](#grantstatus)>> | Promise used to return the authorization result.| 381 382**Error codes** 383 384For details about the error codes, see [Access Control Error Codes](errorcode-access-token.md). 385 386| ID| Error Message| 387| -------- | -------- | 388| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. | 389| 12100001 | Invalid parameter. Possible causes: 1. The context is invalid because it does not belong to the application itself; 2. The permission list contains the permission that is not declared in the module.json file; 3. The permission list is invalid because the permissions in it do not belong to the same permission group. | 390| 12100010 | The request already exists. | 391| 12100011 | All permissions in the permission list have been granted. | 392| 12100012 | The permission list contains the permission that has not been revoked by the user. | 393 394**Example** 395For details about how to obtain the context in the example, see [Obtaining the Context of UIAbility](../../application-models/uiability-usage.md#obtaining-the-context-of-uiability). 396<!--code_no_check--> 397```ts 398import { abilityAccessCtrl, Context, common } from '@kit.AbilityKit'; 399import { BusinessError } from '@kit.BasicServicesKit'; 400 401let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 402let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext; 403atManager.requestPermissionOnSetting(context, ['ohos.permission.CAMERA']).then((data: Array<abilityAccessCtrl.GrantStatus>) => { 404 console.info('data:' + JSON.stringify(data)); 405}).catch((err: BusinessError) => { 406 console.error('data:' + JSON.stringify(err)); 407}); 408``` 409 410### requestGlobalSwitch<sup>12+</sup> 411 412requestGlobalSwitch(context: Context, type: SwitchType): Promise<boolean> 413 414Displays a dialog box for setting a global switch. 415 416When the features such as recording and photographing are disabled, the application can display the dialog box, asking the user to enable the related features. If the global switch is turned on, no dialog box will be displayed. 417 418> **NOTE** 419> 420> This API supports only UIAbilities/UIExtensionAbilities. 421 422**Atomic service API**: This API can be used in atomic services since API version 12. 423 424**Model restriction**: This API can be used only in the stage model. 425 426**System capability**: SystemCapability.Security.AccessToken 427 428**Parameters** 429 430| Name| Type| Mandatory| Description| 431| -------- | -------- | -------- | -------- | 432| context | [Context](js-apis-inner-application-context.md) | Yes| Context of the UIAbility/UIExtensionAbility that requests the permissions.| 433| type | [SwitchType](#switchtype12) | Yes| Type of the global switch.| 434 435**Return value** 436 437| Type | Description | 438| :------------ | :---------------------------------- | 439| Promise<boolean> | Promise used to return the global switch status. **true** to enable, **false** otherwise.| 440 441**Error codes** 442 443For details about the error codes, see [Access Control Error Codes](errorcode-access-token.md). 444 445| ID| Error Message| 446| -------- | -------- | 447| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. | 448| 12100001 | Invalid parameter. Possible causes: 1. The context is invalid because it does not belong to the application itself; 2. The type of global switch is not support. | 449| 12100010 | The request already exists. | 450| 12100013 | The specific global switch is already open. | 451 452**Example** 453For details about how to obtain the context in the example, see [Obtaining the Context of UIAbility](../../application-models/uiability-usage.md#obtaining-the-context-of-uiability). 454<!--code_no_check--> 455```ts 456import { abilityAccessCtrl, Context, common } from '@kit.AbilityKit'; 457import { BusinessError } from '@kit.BasicServicesKit'; 458 459let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 460let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext; 461atManager.requestGlobalSwitch(context, abilityAccessCtrl.SwitchType.CAMERA).then((data: Boolean) => { 462 console.info('data:' + JSON.stringify(data)); 463}).catch((err: BusinessError) => { 464 console.error('data:' + JSON.stringify(err)); 465}); 466``` 467 468### getSelfPermissionStatus<sup>20+</sup> 469 470getSelfPermissionStatus(permissionName: Permissions): PermissionStatus 471 472Queries the permission status of an application. This API returns the result synchronously. 473 474**Atomic service API**: This API can be used in atomic services since API version 20. 475 476**System capability**: SystemCapability.Security.AccessToken 477 478**Parameters** 479 480| Name| Type| Mandatory| Description| 481| -------- | -------- | -------- | -------- | 482| permissionName | Permissions | Yes | Permission to verify. For details about the permission, see [Application Permissions](../../security/AccessToken/app-permissions.md).| 483 484**Return value** 485 486| Type | Description | 487| :------------ | :---------------------------------- | 488| [PermissionStatus](#permissionstatus20) | Permission status.| 489 490**Error codes** 491 492For details about the error codes, see [Access Control Error Codes](errorcode-access-token.md). 493 494| ID| Error Message| 495| -------- | -------- | 496| 12100001 | Invalid parameter. The permissionName is empty or exceeds 256 characters. | 497| 12100007 | The service is abnormal. | 498 499**Example** 500 501```ts 502import { abilityAccessCtrl } from '@kit.AbilityKit'; 503import { BusinessError } from '@kit.BasicServicesKit'; 504 505let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 506try { 507 let data: abilityAccessCtrl.PermissionStatus = atManager.getSelfPermissionStatus('ohos.permission.CAMERA'); 508 console.info(`data->${JSON.stringify(data)}`); 509} catch(err) { 510 console.error(`catch err->${JSON.stringify(err)}`); 511} 512``` 513 514### verifyAccessTokenSync<sup>9+</sup> 515 516verifyAccessTokenSync(tokenID: number, permissionName: Permissions): GrantStatus 517 518Verifies whether a permission is granted to an application. This API returns the result synchronously. 519 520**System capability**: SystemCapability.Security.AccessToken 521 522**Parameters** 523 524| Name | Type | Mandatory| Description | 525| -------- | ------------------- | ---- | ------------------------------------------ | 526| tokenID | number | Yes | Identifier of the target application, which is the value of **accessTokenId** contained in [ApplicationInfo](js-apis-bundleManager-applicationInfo.md).| 527| permissionName | Permissions | Yes | Permission to verify. For details about the permission, see [Application Permissions](../../security/AccessToken/app-permissions.md).| 528 529**Return value** 530 531| Type | Description | 532| :------------ | :---------------------------------- | 533| [GrantStatus](#grantstatus) | Permission grant state.| 534 535**Error codes** 536 537For details about the error codes, see [Access Control Error Codes](errorcode-access-token.md). 538 539| ID| Error Message| 540| -------- | -------- | 541| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. | 542| 12100001 | Invalid parameter. The tokenID is 0, or the permissionName exceeds 256 characters. | 543 544**Example** 545 546```ts 547import { abilityAccessCtrl } from '@kit.AbilityKit'; 548 549let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 550let tokenID: number = 0; // Use bundleManager.getApplicationInfo() to obtain the token ID for a system application, and use bundleManager.getBundleInfoForSelf() to obtain the token ID for a third-party application. 551try { 552 let data: abilityAccessCtrl.GrantStatus = atManager.verifyAccessTokenSync(tokenID, 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS'); 553 console.log(`data->${JSON.stringify(data)}`); 554} catch(err) { 555 console.error(`catch err->${JSON.stringify(err)}`); 556} 557``` 558 559### verifyAccessToken<sup>9+</sup> 560 561verifyAccessToken(tokenID: number, permissionName: Permissions): Promise<GrantStatus> 562 563Checks whether the user has granted the permission. This API uses a promise to return the result. 564 565> **NOTE** 566> 567> You are advised to use [checkAccessToken](#checkaccesstoken9). 568 569**System capability**: SystemCapability.Security.AccessToken 570 571**Parameters** 572 573| Name | Type | Mandatory| Description | 574| -------- | ------------------- | ---- | ------------------------------------------ | 575| tokenID | number | Yes | Identifier of the target application, which is the value of **accessTokenId** contained in [ApplicationInfo](js-apis-bundleManager-applicationInfo.md).| 576| permissionName | Permissions | Yes | Permission to verify. For details about the permission, see [Application Permissions](../../security/AccessToken/app-permissions.md).| 577 578**Return value** 579 580| Type | Description | 581| :------------ | :---------------------------------- | 582| Promise<[GrantStatus](#grantstatus)> | Promise used to return the authorization result.| 583 584**Example** 585 586```ts 587import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit'; 588import { BusinessError } from '@kit.BasicServicesKit'; 589 590let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 591let tokenID: number = 0; // Use bundleManager.getApplicationInfo() to obtain the token ID for a system application, and use bundleManager.getBundleInfoForSelf() to obtain the token ID for a third-party application. 592let permissionName: Permissions = 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS'; 593atManager.verifyAccessToken(tokenID, permissionName).then((data: abilityAccessCtrl.GrantStatus) => { 594 console.log(`promise: data->${JSON.stringify(data)}`); 595}).catch((err: BusinessError) => { 596 console.error(`verifyAccessToken fail, err->${JSON.stringify(err)}`); 597}); 598``` 599 600### verifyAccessToken<sup>(deprecated)</sup> 601 602verifyAccessToken(tokenID: number, permissionName: string): Promise<GrantStatus> 603 604Checks whether the user has granted the permission. This API uses a promise to return the result. 605 606> **NOTE** 607> 608> This API is no longer maintained since API version 9. Use [checkAccessToken](#checkaccesstoken9) instead. 609 610**System capability**: SystemCapability.Security.AccessToken 611 612**Parameters** 613 614| Name | Type | Mandatory| Description | 615| -------- | ------------------- | ---- | ------------------------------------------ | 616| tokenID | number | Yes | Identifier of the target application, which is the value of **accessTokenId** contained in [ApplicationInfo](js-apis-bundleManager-applicationInfo.md).| 617| permissionName | string | Yes | Permission to verify. For details about the permission, see [Application Permissions](../../security/AccessToken/app-permissions.md).| 618 619**Return value** 620 621| Type | Description | 622| :------------ | :---------------------------------- | 623| Promise<[GrantStatus](#grantstatus)> | Promise used to return the authorization result.| 624 625**Example** 626 627```ts 628import { abilityAccessCtrl } from '@kit.AbilityKit'; 629import { BusinessError } from '@kit.BasicServicesKit'; 630 631let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager(); 632let tokenID: number = 0; // Use bundleManager.getApplicationInfo() to obtain the token ID for a system application, and use bundleManager.getBundleInfoForSelf() to obtain the token ID for a third-party application. 633atManager.verifyAccessToken(tokenID, 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS').then((data: abilityAccessCtrl.GrantStatus) => { 634 console.log(`promise: data->${JSON.stringify(data)}`); 635}).catch((err: BusinessError) => { 636 console.error(`verifyAccessToken fail, err->${JSON.stringify(err)}`); 637}); 638``` 639 640## GrantStatus 641 642Enumerates the permission grant states. 643 644**Atomic service API**: This API can be used in atomic services since API version 11. 645 646**System capability**: SystemCapability.Security.AccessToken 647 648| Name | Value| Description | 649| ------------------ | ----- | ----------- | 650| PERMISSION_DENIED | -1 | The permission is not granted.| 651| PERMISSION_GRANTED | 0 | The permission is granted.| 652 653## SwitchType<sup>12+</sup> 654 655Enumerates the global switch types. 656 657**Atomic service API**: This API can be used in atomic services since API version 12. 658 659**System capability**: SystemCapability.Security.AccessToken 660 661| Name | Value| Description | 662| ------------------ | ----- | ----------- | 663| CAMERA | 0 | Global switch of the camera.| 664| MICROPHONE | 1 | Global switch of the microphone.| 665| LOCATION | 2 | Global switch of the location service.| 666 667## PermissionStateChangeType<sup>18+</sup> 668 669Enumerates the operations that trigger permission state changes. 670 671**Atomic service API**: This API can be used in atomic services since API version 18. 672 673**System capability**: SystemCapability.Security.AccessToken 674 675| Name | Value| Description | 676| ----------------------- | ------ | ----------------- | 677| PERMISSION_REVOKED_OPER | 0 | Operation to revoke a permission.| 678| PERMISSION_GRANTED_OPER | 1 | Operation to grant a permission.| 679 680## PermissionStateChangeInfo<sup>18+</sup> 681 682Represents the permission state change details. 683 684**Atomic service API**: This API can be used in atomic services since API version 18. 685 686**System capability**: SystemCapability.Security.AccessToken 687 688| Name | Type | Read Only| Optional| Description | 689| -------------- | ------------------------- | ---- | ---- | ------------------ | 690| change | [PermissionStateChangeType](#permissionstatechangetype18) | Yes | No | Operation that triggers the permission state change. | 691| tokenID | number | Yes | No | Identifier of the target application, which is the value of **accessTokenId** contained in [ApplicationInfo](js-apis-bundleManager-applicationInfo.md).| 692| permissionName | Permissions | Yes | No | Permissions whose authorization state changes. For details about the permissions, see [Application Permissions](../../security/AccessToken/app-permissions.md).| 693 694## PermissionRequestResult<sup>10+</sup> 695 696type PermissionRequestResult = _PermissionRequestResult 697 698Represents the permission request result. 699 700**Atomic service API**: This API can be used in atomic services since API version 11. 701 702**Model restriction**: This API can be used only in the stage model. 703 704**System capability**: SystemCapability.Security.AccessToken 705 706| Type| Description| 707| -------- | -------- | 708| [_PermissionRequestResult](js-apis-permissionrequestresult.md) | Permission request result object.| 709 710## Context<sup>10+</sup> 711 712type Context = _Context 713 714Represents the context for the ability or application. It allows access to application-specific resources. 715 716**Atomic service API**: This API can be used in atomic services since API version 11. 717 718**Model restriction**: This API can be used only in the stage model. 719 720**System capability**: SystemCapability.Security.AccessToken 721 722| Type| Description| 723| -------- | -------- | 724| [_Context](js-apis-inner-application-context.md) | Context for an ability or application to access to application-specific resources.| 725 726## PermissionStatus<sup>20+</sup> 727 728Enumerates the permission states. 729 730**Atomic service API**: This API can be used in atomic services since API version 20. 731 732**System capability**: SystemCapability.Security.AccessToken 733 734| Name | Value| Description | 735| ------------------ | ----- | ----------- | 736| DENIED | -1 | The permission is not granted.| 737| GRANTED | 0 | The permission is granted.| 738| NOT_DETERMINED | 1 | The permission state is not determined. This value is returned when the application declares [user_grant permissions](../../security/AccessToken/permissions-for-all-user.md) and does not call [requestPermissionsFromUser](#requestpermissionsfromuser9) to request user authorization, or when the user changes the permission state to **Ask each time** in **Settings**.| 739| INVALID | 2 | The permission is invalid. The application does not [declare permissions](../../security/AccessToken/declare-permissions.md) or cannot process the request. For example, if the status of the approximate location permission is **NOT_DETERMINED**, this value will be returned when the status of the precise location permission is queried.| 740| RESTRICTED | 3 | The permission is restricted. <!--RP2-->The application is not allowed to call [requestPermissionsFromUser](#requestpermissionsfromuser9) to request user authorization.<!--RP2End--> | 741