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