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