• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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&lt;GrantStatus&gt;
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&lt;[GrantStatus](#grantstatus)&gt; | 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&lt;Permissions&gt;, callback: Callback&lt;PermissionStateChangeInfo&gt;): 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&lt;Permissions&gt;   | 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&lt;[PermissionStateChangeInfo](#permissionstatechangeinfo18)&gt; | 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&lt;Permissions&gt;, callback?: Callback&lt;PermissionStateChangeInfo&gt;): 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&lt;Permissions&gt;   | 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&lt;[PermissionStateChangeInfo](#permissionstatechangeinfo18)&gt; | 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&lt;Permissions&gt;, requestCallback: AsyncCallback&lt;PermissionRequestResult&gt;): 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&lt;Permissions&gt; | Yes| Permissions to request. For details about the permissions, see [Application Permissions](../../security/AccessToken/app-permissions.md).|
256| requestCallback | AsyncCallback&lt;[PermissionRequestResult](js-apis-permissionrequestresult.md)&gt; | 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&lt;Permissions&gt;): Promise&lt;PermissionRequestResult&gt;
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&lt;Permissions&gt; | 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&lt;[PermissionRequestResult](js-apis-permissionrequestresult.md)&gt; | 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&lt;Permissions&gt;): Promise&lt;Array&lt;GrantStatus&gt;&gt;
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&lt;Permissions&gt; | 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&lt;Array&lt;[GrantStatus](#grantstatus)&gt;&gt; | 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&lt;boolean&gt;
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&lt;boolean&gt; | 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&lt;GrantStatus&gt;
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&lt;[GrantStatus](#grantstatus)&gt; | 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&lt;GrantStatus&gt;
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&lt;[GrantStatus](#grantstatus)&gt; | 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