• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.abilityAccessCtrl (程序访问控制管理)
2
3<!--Kit: Ability Kit-->
4<!--Subsystem: Security-->
5<!--Owner: @xia-bubai-->
6<!--Designer: @linshuqing; @hehehe-li-->
7<!--Tester: @leiyuqian-->
8<!--Adviser: @zengyawen-->
9
10程序访问控制提供应用程序的权限校验和管理能力。
11
12> **说明:**
13> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
14
15## 导入模块
16
17```ts
18import { abilityAccessCtrl } from '@kit.AbilityKit';
19```
20
21## abilityAccessCtrl.createAtManager
22
23createAtManager(): AtManager
24
25访问控制管理:创建程序访问控制管理的实例对象。
26
27**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
28
29**系统能力:** SystemCapability.Security.AccessToken
30
31
32**返回值:**
33
34| 类型 | 说明 |
35| -------- | -------- |
36| [AtManager](#atmanager) | 获取程序访问控制模块的实例。 |
37
38**示例:**
39
40```ts
41let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
42```
43
44## AtManager
45
46管理访问控制模块的实例。
47
48### checkAccessToken<sup>9+</sup>
49
50checkAccessToken(tokenID: number, permissionName: Permissions): Promise&lt;GrantStatus&gt;
51
52校验应用是否被授予权限。使用Promise异步回调。
53
54**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
55
56**系统能力:** SystemCapability.Security.AccessToken
57
58**参数:**
59
60| 参数名   | 类型                 | 必填 | 说明                                       |
61| -------- | -------------------  | ---- | ------------------------------------------ |
62| tokenID   |  number   | 是   | 要校验的目标应用的身份标识,可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)的accessTokenId字段获得。|
63| permissionName | [Permissions](../../security/AccessToken/app-permissions.md) | 是   | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 |
64
65**返回值:**
66
67| 类型          | 说明                                |
68| :------------ | :---------------------------------- |
69| Promise&lt;[GrantStatus](#grantstatus)&gt; | Promise对象,返回授权状态结果。 |
70
71**错误码:**
72
73以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[访问控制错误码](errorcode-access-token.md)。
74
75| 错误码ID | 错误信息 |
76| -------- | -------- |
77| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
78| 12100001 | Invalid parameter. The tokenID is 0, or the permissionName exceeds 256 characters. |
79
80**示例:**
81
82```ts
83import { abilityAccessCtrl } from '@kit.AbilityKit';
84import { BusinessError } from '@kit.BasicServicesKit';
85
86let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
87let tokenID: number = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,三方应用可以通过bundleManager.getBundleInfoForSelf获取。
88atManager.checkAccessToken(tokenID, 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS').then((data: abilityAccessCtrl.GrantStatus) => {
89  console.info(`checkAccessToken success, data->${JSON.stringify(data)}`);
90}).catch((err: BusinessError) => {
91  console.error(`checkAccessToken fail, err->${JSON.stringify(err)}`);
92});
93```
94
95### checkAccessTokenSync<sup>10+</sup>
96
97checkAccessTokenSync(tokenID: number, permissionName: Permissions): GrantStatus
98
99校验应用是否被授予权限,同步返回结果。
100
101**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
102
103**系统能力:** SystemCapability.Security.AccessToken
104
105**参数:**
106
107| 参数名   | 类型                 | 必填 | 说明                                       |
108| -------- | -------------------  | ---- | ------------------------------------------ |
109| tokenID   |  number   | 是   | 要校验应用的身份标识,可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)的accessTokenId字段获得。|
110| permissionName | [Permissions](../../security/AccessToken/app-permissions.md) | 是   | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 |
111
112**返回值:**
113
114| 类型          | 说明                                |
115| :------------ | :---------------------------------- |
116| [GrantStatus](#grantstatus) | 枚举实例,返回授权状态。 |
117
118**错误码:**
119
120以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[访问控制错误码](errorcode-access-token.md)。
121
122| 错误码ID | 错误信息 |
123| -------- | -------- |
124| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
125| 12100001 | Invalid parameter. The tokenID is 0, or the permissionName exceeds 256 characters. |
126
127**示例:**
128
129```ts
130import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit';
131
132let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
133let tokenID: number = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,三方应用可以通过bundleManager.getBundleInfoForSelf获取。
134let permissionName: Permissions = 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS';
135let data: abilityAccessCtrl.GrantStatus = atManager.checkAccessTokenSync(tokenID, permissionName);
136console.info(`data->${JSON.stringify(data)}`);
137```
138
139### on<sup>18+</sup>
140
141on(type: 'selfPermissionStateChange', permissionList: Array&lt;Permissions&gt;, callback: Callback&lt;PermissionStateChangeInfo&gt;): void
142
143订阅本应用的指定权限列表的权限授权状态变化事件。当本应用对应权限的授权状态发生变化时,触发对应回调函数的执行。
144
145- 多次调用本订阅接口时,如果订阅的权限列表相同,callback不同,允许订阅成功。
146
147- 多次调用本订阅接口时,如果订阅的权限列表间有相同的子集,callback相同时,订阅失败。
148
149**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
150
151**系统能力:** SystemCapability.Security.AccessToken
152
153**参数:**
154
155| 参数名             | 类型                   | 必填 | 说明                                                          |
156| ------------------ | --------------------- | ---- | ------------------------------------------------------------ |
157| type               | string                | 是   | 订阅事件类型,固定为'selfPermissionStateChange',自身权限状态变更事件。  |
158| permissionList | Array&lt;[Permissions](../../security/AccessToken/app-permissions.md)&gt;   | 是   | 订阅的权限名列表,如果为空,则表示订阅所有的权限状态变化,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。|
159| callback | Callback&lt;[PermissionStateChangeInfo](#permissionstatechangeinfo18)&gt; | 是 | 订阅指定权限名状态变更事件的回调。|
160
161**错误码:**
162
163以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[访问控制错误码](errorcode-access-token.md)。
164
165| 错误码ID | 错误信息 |
166| -------- | -------- |
167| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
168| 12100001 | Invalid parameter. Possible causes: 1. The permissionList exceeds the size limit; 2. The permissionNames in the list are all invalid. |
169| 12100004 | The API is used repeatedly with the same input. |
170| 12100005 | The registration time has exceeded the limit. |
171| 12100007 | The service is abnormal. |
172
173**示例:**
174
175```ts
176import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit';
177
178let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
179let permissionList: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION'];
180try {
181    atManager.on('selfPermissionStateChange', permissionList, (data: abilityAccessCtrl.PermissionStateChangeInfo) => {
182        console.info('receive permission state change, data:' + JSON.stringify(data));
183    });
184} catch(err) {
185    console.error(`catch err->${JSON.stringify(err)}`);
186}
187```
188### off<sup>18+</sup>
189
190off(type: 'selfPermissionStateChange', permissionList: Array&lt;Permissions&gt;, callback?: Callback&lt;PermissionStateChangeInfo&gt;): void
191
192取消订阅自身指定权限列表的权限状态变更事件,使用callback回调异步返回结果。
193
194取消订阅不传callback时,批量删除permissionList下面的所有callback。
195
196**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
197
198**系统能力:** SystemCapability.Security.AccessToken
199
200**参数:**
201
202| 参数名             | 类型                   | 必填 | 说明                                                          |
203| ------------------ | --------------------- | ---- | ------------------------------------------------------------ |
204| type               | string         | 是   | 订阅事件类型,固定为'selfPermissionStateChange',权限状态变更事件。  |
205| permissionList | Array&lt;[Permissions](../../security/AccessToken/app-permissions.md)&gt;   | 是   | 取消订阅的权限名列表,为空时表示取消订阅所有的权限状态变化,必须与on的输入一致,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 |
206| callback | Callback&lt;[PermissionStateChangeInfo](#permissionstatechangeinfo18)&gt; | 否 | 取消订阅指定tokenID与指定权限名状态变更事件的回调。|
207
208**错误码:**
209
210以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[访问控制错误码](errorcode-access-token.md)。
211
212| 错误码ID | 错误信息 |
213| -------- | -------- |
214| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
215| 12100001 | Invalid parameter. The permissionNames in the list are all invalid. |
216| 12100004 | The API is not used in pair with 'on'. |
217| 12100007 | The service is abnormal. |
218
219**示例:**
220
221```ts
222import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit';
223
224let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
225let permissionList: Array<Permissions> = ['ohos.permission.APPROXIMATELY_LOCATION'];
226try {
227    atManager.off('selfPermissionStateChange', permissionList);
228} catch(err) {
229    console.error(`catch err->${JSON.stringify(err)}`);
230}
231```
232
233### requestPermissionsFromUser<sup>9+</sup>
234
235requestPermissionsFromUser(context: Context, permissionList: Array&lt;Permissions&gt;, requestCallback: AsyncCallback&lt;PermissionRequestResult&gt;): void
236
237用于<!--RP1-->[UIAbility](js-apis-app-ability-uiAbility.md#uiability)<!--RP1End-->拉起弹框请求[用户授权](../../security/AccessToken/request-user-authorization.md)。使用callback异步回调。
238
239如果用户拒绝授权,将无法再次拉起弹框,需要用户在系统应用“设置”的界面中,手动授予权限,或是调用[requestPermissionOnSetting](#requestpermissiononsetting12),拉起权限设置弹框,引导用户授权。
240
241<!--RP3-->
242![requestPermissionsFromUser](figures/requestPermissionsFromUser.png)
243<!--RP3End-->
244
245**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
246
247**模型约束:** 此接口仅可在Stage模型下使用。
248
249**系统能力:** SystemCapability.Security.AccessToken
250
251**参数:**
252
253| 参数名 | 类型 | 必填 | 说明 |
254| -------- | -------- | -------- | -------- |
255| context | [Context](js-apis-inner-application-context.md) | 是 | 请求权限的<!--RP1-->UIAbility<!--RP1End-->的Context。 |
256| permissionList | Array&lt;[Permissions](../../security/AccessToken/app-permissions.md)&gt; | 是 | 权限名列表,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 |
257| requestCallback | AsyncCallback&lt;[PermissionRequestResult](js-apis-permissionrequestresult.md)&gt; | 是 | 回调函数,返回接口调用是否成功的结果。 |
258
259**错误码:**
260
261以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[访问控制错误码](errorcode-access-token.md)。
262
263| 错误码ID | 错误信息 |
264| -------- | -------- |
265| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
266| 12100001 | Invalid parameter. The context is invalid when it does not belong to the application itself. |
267
268**示例:**
269
270下述示例中context的获取方式请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
271关于向用户申请授权的完整流程及示例,请参见[向用户申请授权](../../security/AccessToken/request-user-authorization.md)。
272<!--code_no_check-->
273```ts
274import { abilityAccessCtrl, Context, PermissionRequestResult, common } from '@kit.AbilityKit';
275import { BusinessError } from '@kit.BasicServicesKit';
276
277let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
278let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext;
279atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult) => {
280  if (err) {
281    console.error(`requestPermissionsFromUser fail, err->${JSON.stringify(err)}`);
282  } else {
283    console.info('data:' + JSON.stringify(data));
284    console.info('data permissions:' + data.permissions);
285    console.info('data authResults:' + data.authResults);
286    console.info('data dialogShownResults:' + data.dialogShownResults);
287  }
288});
289```
290
291### requestPermissionsFromUser<sup>9+</sup>
292
293requestPermissionsFromUser(context: Context, permissionList: Array&lt;Permissions&gt;): Promise&lt;PermissionRequestResult&gt;
294
295用于<!--RP1-->[UIAbility](js-apis-app-ability-uiAbility.md#uiability)<!--RP1End-->拉起弹框请求[用户授权](../../security/AccessToken/request-user-authorization.md)。使用promise异步回调。
296
297如果用户拒绝授权,将无法再次拉起弹框,需要用户在系统应用“设置”的界面中,手动授予权限,或是调用[requestPermissionOnSetting](#requestpermissiononsetting12),拉起权限设置弹框,引导用户授权。
298
299**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
300
301**模型约束:** 此接口仅可在Stage模型下使用。
302
303**系统能力:** SystemCapability.Security.AccessToken
304
305**参数:**
306
307| 参数名 | 类型 | 必填 | 说明 |
308| -------- | -------- | -------- | -------- |
309| context | [Context](js-apis-inner-application-context.md) | 是 | 请求权限的<!--RP1-->UIAbility<!--RP1End-->的Context。 |
310| permissionList | Array&lt;[Permissions](../../security/AccessToken/app-permissions.md)&gt; | 是 | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 |
311
312**返回值:**
313
314| 类型 | 说明 |
315| -------- | -------- |
316| Promise&lt;[PermissionRequestResult](js-apis-permissionrequestresult.md)&gt; | 返回一个Promise,包含接口的结果。 |
317
318**错误码:**
319
320以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[访问控制错误码](errorcode-access-token.md)。
321
322| 错误码ID | 错误信息 |
323| -------- | -------- |
324| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
325| 12100001 | Invalid parameter. The context is invalid when it does not belong to the application itself. |
326
327**示例:**
328
329下述示例中context的获取方式请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
330关于向用户申请授权的完整流程及示例,请参见[向用户申请授权](../../security/AccessToken/request-user-authorization.md)。
331<!--code_no_check-->
332```ts
333import { abilityAccessCtrl, Context, PermissionRequestResult, common } from '@kit.AbilityKit';
334import { BusinessError } from '@kit.BasicServicesKit';
335
336let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
337let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext;
338atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA']).then((data: PermissionRequestResult) => {
339  console.info('data:' + JSON.stringify(data));
340  console.info('data permissions:' + data.permissions);
341  console.info('data authResults:' + data.authResults);
342  console.info('data dialogShownResults:' + data.dialogShownResults);
343}).catch((err: BusinessError) => {
344  console.error('data:' + JSON.stringify(err));
345});
346```
347
348### requestPermissionOnSetting<sup>12+</sup>
349
350requestPermissionOnSetting(context: Context, permissionList: Array&lt;Permissions&gt;): Promise&lt;Array&lt;GrantStatus&gt;&gt;
351
352用于[UIAbility](js-apis-app-ability-uiAbility.md#uiability)/[UIExtensionAbility](js-apis-app-ability-uiExtensionAbility.md#uiextensionability)二次拉起权限设置弹框。
353
354在调用此接口前,应用需要先调用[requestPermissionsFromUser](#requestpermissionsfromuser9),如果用户在首次弹窗授权时已授权,调用当前接口将无法拉起弹窗。
355
356<!--RP4-->
357![requestPermissionOnSetting](figures/requestPermissionOnSetting.png)
358<!--RP4End-->
359
360**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
361
362**模型约束:** 此接口仅可在Stage模型下使用。
363
364**系统能力:** SystemCapability.Security.AccessToken
365
366**参数:**
367
368| 参数名 | 类型 | 必填 | 说明 |
369| -------- | -------- | -------- | -------- |
370| context | [Context](js-apis-inner-application-context.md) | 是 | 请求权限的UIAbility/UIExtensionAbility的Context。 |
371| permissionList | Array&lt;[Permissions](../../security/AccessToken/app-permissions.md)&gt; | 是 | 权限名列表,合法的权限名取值可在[应用权限组列表](../../security/AccessToken/app-permission-group-list.md)中查询。 |
372
373**返回值:**
374
375| 类型          | 说明                                |
376| :------------ | :---------------------------------- |
377| Promise&lt;Array&lt;[GrantStatus](#grantstatus)&gt;&gt; | Promise对象,返回授权状态结果。 |
378
379**错误码:**
380
381以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[访问控制错误码](errorcode-access-token.md)。
382
383| 错误码ID | 错误信息 |
384| -------- | -------- |
385| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
386| 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. |
387| 12100010 | The request already exists. |
388| 12100011 | All permissions in the permission list have been granted. |
389| 12100012 | The permission list contains the permission that has not been revoked by the user. |
390
391**示例:**
392示例中context的获取方式请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
393<!--code_no_check-->
394```ts
395import { abilityAccessCtrl, Context, common } from '@kit.AbilityKit';
396import { BusinessError } from '@kit.BasicServicesKit';
397
398let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
399let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext;
400atManager.requestPermissionOnSetting(context, ['ohos.permission.CAMERA']).then((data: Array<abilityAccessCtrl.GrantStatus>) => {
401  console.info('data:' + JSON.stringify(data));
402}).catch((err: BusinessError) => {
403  console.error('data:' + JSON.stringify(err));
404});
405```
406
407### requestGlobalSwitch<sup>12+</sup>
408
409requestGlobalSwitch(context: Context, type: SwitchType): Promise&lt;boolean&gt;
410
411用于UIAbility/UIExtensionAbility拉起全局开关设置弹框。
412
413在某些情况下,如果录音、拍照等功能被禁用,应用可拉起此弹框请求用户同意开启对应功能。如果当前全局开关的状态为开启,则不拉起弹框。
414
415<!--RP5-->
416![requestGlobalSwitch](figures/requestGlobalSwitch.png)
417<!--RP5End-->
418
419**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
420
421**模型约束:** 此接口仅可在Stage模型下使用。
422
423**系统能力:** SystemCapability.Security.AccessToken
424
425**参数:**
426
427| 参数名 | 类型 | 必填 | 说明 |
428| -------- | -------- | -------- | -------- |
429| context | [Context](js-apis-inner-application-context.md) | 是 | 请求权限的UIAbility/UIExtensionAbility的Context。 |
430| type | [SwitchType](#switchtype12) | 是 | 全局开关类型。 |
431
432**返回值:**
433
434| 类型          | 说明                                |
435| :------------ | :---------------------------------- |
436| Promise&lt;boolean&gt; | Promise对象,返回全局开关状态。true表示开启,false表示关闭。 |
437
438**错误码:**
439
440以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[访问控制错误码](errorcode-access-token.md)。
441
442| 错误码ID | 错误信息 |
443| -------- | -------- |
444| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types. |
445| 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. |
446| 12100010 | The request already exists. |
447| 12100013 | The specific global switch is already open. |
448
449**示例:**
450示例中context的获取方式请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
451<!--code_no_check-->
452```ts
453import { abilityAccessCtrl, Context, common } from '@kit.AbilityKit';
454import { BusinessError } from '@kit.BasicServicesKit';
455
456let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
457let context: Context = this.getUIContext().getHostContext() as common.UIAbilityContext;
458atManager.requestGlobalSwitch(context, abilityAccessCtrl.SwitchType.CAMERA).then((data: Boolean) => {
459  console.info('data:' + JSON.stringify(data));
460}).catch((err: BusinessError) => {
461  console.error('data:' + JSON.stringify(err));
462});
463```
464
465### getSelfPermissionStatus<sup>20+</sup>
466
467getSelfPermissionStatus(permissionName: Permissions): PermissionStatus
468
469查询应用权限状态,同步返回结果。
470
471**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
472
473**系统能力:** SystemCapability.Security.AccessToken
474
475**参数:**
476
477| 参数名 | 类型 | 必填 | 说明 |
478| -------- | -------- | -------- | -------- |
479| permissionName | [Permissions](../../security/AccessToken/app-permissions.md) | 是   | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 |
480
481**返回值:**
482
483| 类型          | 说明                                |
484| :------------ | :---------------------------------- |
485| [PermissionStatus](#permissionstatus20) | 枚举实例,返回权限状态。 |
486
487**错误码:**
488
489以下错误码的详细介绍请参见[访问控制错误码](errorcode-access-token.md)。
490
491| 错误码ID | 错误信息 |
492| -------- | -------- |
493| 12100001 | Invalid parameter. The permissionName is empty or exceeds 256 characters. |
494| 12100007 | The service is abnormal. |
495
496**示例:**
497
498```ts
499import { abilityAccessCtrl } from '@kit.AbilityKit';
500import { BusinessError } from '@kit.BasicServicesKit';
501
502let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
503try {
504  let data: abilityAccessCtrl.PermissionStatus = atManager.getSelfPermissionStatus('ohos.permission.CAMERA');
505  console.info(`data->${JSON.stringify(data)}`);
506} catch(err) {
507  console.error(`catch err->${JSON.stringify(err)}`);
508}
509```
510
511### verifyAccessTokenSync<sup>9+</sup>
512
513verifyAccessTokenSync(tokenID: number, permissionName: Permissions): GrantStatus
514
515校验应用是否被授予权限,同步返回结果。
516
517**系统能力:** SystemCapability.Security.AccessToken
518
519**参数:**
520
521| 参数名   | 类型                 | 必填 | 说明                                       |
522| -------- | -------------------  | ---- | ------------------------------------------ |
523| tokenID   |  number   | 是   | 要校验应用的身份标识,可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)的accessTokenId字段获得。|
524| permissionName | [Permissions](../../security/AccessToken/app-permissions.md) | 是   | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 |
525
526**返回值:**
527
528| 类型          | 说明                                |
529| :------------ | :---------------------------------- |
530| [GrantStatus](#grantstatus) | 枚举实例,返回授权状态。 |
531
532**错误码:**
533
534以下错误码的详细介绍请参见[通用错误码](../errorcode-universal.md)和[访问控制错误码](errorcode-access-token.md)。
535
536| 错误码ID | 错误信息 |
537| -------- | -------- |
538| 401 | Parameter error. Possible causes: 1.Mandatory parameters are left unspecified; 2.Incorrect parameter types. |
539| 12100001 | Invalid parameter. The tokenID is 0, or the permissionName exceeds 256 characters. |
540
541**示例:**
542
543```ts
544import { abilityAccessCtrl } from '@kit.AbilityKit';
545
546let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
547let tokenID: number = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,三方应用可以通过bundleManager.getBundleInfoForSelf获取。
548try {
549  let data: abilityAccessCtrl.GrantStatus = atManager.verifyAccessTokenSync(tokenID, 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS');
550  console.info(`data->${JSON.stringify(data)}`);
551} catch(err) {
552  console.error(`catch err->${JSON.stringify(err)}`);
553}
554```
555
556### verifyAccessToken<sup>9+</sup>
557
558verifyAccessToken(tokenID: number, permissionName: Permissions): Promise&lt;GrantStatus&gt;
559
560校验应用是否被授予权限。使用Promise异步回调。
561
562> **说明:**
563>
564> 建议使用[checkAccessToken](#checkaccesstoken9)替代。
565
566**系统能力:** SystemCapability.Security.AccessToken
567
568**参数:**
569
570| 参数名   | 类型                 | 必填 | 说明                                       |
571| -------- | -------------------  | ---- | ------------------------------------------ |
572| tokenID   |  number   | 是   | 要校验的目标应用的身份标识,可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)的accessTokenId字段获得。|
573| permissionName | [Permissions](../../security/AccessToken/app-permissions.md) | 是   | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 |
574
575**返回值:**
576
577| 类型          | 说明                                |
578| :------------ | :---------------------------------- |
579| Promise&lt;[GrantStatus](#grantstatus)&gt; | Promise对象,返回授权状态结果。 |
580
581**示例:**
582
583```ts
584import { abilityAccessCtrl, Permissions } from '@kit.AbilityKit';
585import { BusinessError } from '@kit.BasicServicesKit';
586
587let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
588let tokenID: number = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,三方应用可以通过bundleManager.getBundleInfoForSelf获取。
589let permissionName: Permissions = 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS';
590atManager.verifyAccessToken(tokenID, permissionName).then((data: abilityAccessCtrl.GrantStatus) => {
591  console.info(`promise: data->${JSON.stringify(data)}`);
592}).catch((err: BusinessError) => {
593  console.error(`verifyAccessToken fail, err->${JSON.stringify(err)}`);
594});
595```
596
597### verifyAccessToken<sup>(deprecated)</sup>
598
599verifyAccessToken(tokenID: number, permissionName: string): Promise&lt;GrantStatus&gt;
600
601校验应用是否被授予权限。使用Promise异步回调。
602
603> **说明:**
604>
605> 从API version 9开始不再维护,建议使用[checkAccessToken](#checkaccesstoken9)替代。
606
607**系统能力:** SystemCapability.Security.AccessToken
608
609**参数:**
610
611| 参数名   | 类型                 | 必填 | 说明                                       |
612| -------- | -------------------  | ---- | ------------------------------------------ |
613| tokenID   |  number   | 是   | 要校验的目标应用的身份标识,可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)的accessTokenId字段获得。|
614| permissionName | string | 是   | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 |
615
616**返回值:**
617
618| 类型          | 说明                                |
619| :------------ | :---------------------------------- |
620| Promise&lt;[GrantStatus](#grantstatus)&gt; | Promise对象,返回授权状态结果。 |
621
622**示例:**
623
624```ts
625import { abilityAccessCtrl } from '@kit.AbilityKit';
626import { BusinessError } from '@kit.BasicServicesKit';
627
628let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
629let tokenID: number = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,三方应用可以通过bundleManager.getBundleInfoForSelf获取。
630atManager.verifyAccessToken(tokenID, 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS').then((data: abilityAccessCtrl.GrantStatus) => {
631  console.info(`promise: data->${JSON.stringify(data)}`);
632}).catch((err: BusinessError) => {
633  console.error(`verifyAccessToken fail, err->${JSON.stringify(err)}`);
634});
635```
636
637## GrantStatus
638
639表示授权状态的枚举。
640
641**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
642
643**系统能力:** SystemCapability.Security.AccessToken
644
645| 名称               |    值 | 说明        |
646| ------------------ | ----- | ----------- |
647| PERMISSION_DENIED  | -1    | 表示未授权。 |
648| PERMISSION_GRANTED | 0     | 表示已授权。 |
649
650## SwitchType<sup>12+</sup>
651
652表示全局开关类型的枚举。
653
654**原子化服务API:** 从API version 12开始,该接口支持在原子化服务中使用。
655
656**系统能力:** SystemCapability.Security.AccessToken
657
658| 名称               |    值 | 说明        |
659| ------------------ | ----- | ----------- |
660| CAMERA  | 0    | 表示相机全局开关。 |
661| MICROPHONE | 1     | 表示麦克风全局开关。 |
662| LOCATION | 2     | 表示位置全局开关。 |
663
664## PermissionStateChangeType<sup>18+</sup>
665
666表示权限授权状态变化操作类型的枚举。
667
668**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
669
670**系统能力:** SystemCapability.Security.AccessToken
671
672| 名称                     |    值 | 说明              |
673| ----------------------- | ------ | ----------------- |
674| PERMISSION_REVOKED_OPER | 0      | 表示权限取消操作。 |
675| PERMISSION_GRANTED_OPER | 1      | 表示权限授予操作。 |
676
677## PermissionStateChangeInfo<sup>18+</sup>
678
679表示某次权限授权状态变化的详情。
680
681**原子化服务API:** 从API version 18开始,该接口支持在原子化服务中使用。
682
683**系统能力:** SystemCapability.Security.AccessToken
684
685| 名称           | 类型                       | 只读 | 可选 | 说明                |
686| -------------- | ------------------------- | ---- | ---- | ------------------ |
687| change         | [PermissionStateChangeType](#permissionstatechangetype18) | 否   | 否   | 权限授权状态变化类型。        |
688| tokenID        | number                    | 否   | 否   | 被订阅的应用身份标识,可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)的accessTokenId字段获得。|
689| permissionName | [Permissions](../../security/AccessToken/app-permissions.md)                    | 否   | 否   | 当前授权状态发生变化的权限名,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 |
690
691## PermissionRequestResult<sup>10+</sup>
692
693type PermissionRequestResult = _PermissionRequestResult
694
695权限请求结果对象。
696
697**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
698
699**模型约束:** 此接口仅可在Stage模型下使用。
700
701**系统能力:** SystemCapability.Security.AccessToken
702
703| 类型 | 说明 |
704| -------- | -------- |
705| [_PermissionRequestResult](js-apis-permissionrequestresult.md) | 权限请求结果对象。 |
706
707## Context<sup>10+</sup>
708
709type Context = _Context
710
711提供了ability或application的上下文的能力,包括访问特定应用程序的资源等。
712
713**原子化服务API:** 从API version 11开始,该接口支持在原子化服务中使用。
714
715**模型约束:** 此接口仅可在Stage模型下使用。
716
717**系统能力:** SystemCapability.Security.AccessToken
718
719| 类型 | 说明 |
720| -------- | -------- |
721| [_Context](js-apis-inner-application-context.md) | 提供了ability或application的上下文的能力,包括访问特定应用程序的资源等。 |
722
723## PermissionStatus<sup>20+</sup>
724
725表示权限状态的枚举。
726
727**原子化服务API:** 从API version 20开始,该接口支持在原子化服务中使用。
728
729**系统能力:** SystemCapability.Security.AccessToken
730
731| 名称               |    值 | 说明        |
732| ------------------ | ----- | ----------- |
733| DENIED  | -1    | 表示用户未授权。 |
734| GRANTED | 0     | 表示已授权。 |
735| NOT_DETERMINED | 1     | 表示未操作。应用声明[用户授权权限](../../security/AccessToken/permissions-for-all-user.md),暂未调用[requestPermissionsFromUser](#requestpermissionsfromuser9)接口请求用户授权时,或用户在设置中将权限状态修改为每次询问时,查询权限状态将返回此值。 |
736| INVALID | 2     | 表示无效。应用未[声明权限](../../security/AccessToken/declare-permissions.md)或当前无法处理。例如:当模糊位置权限的状态为NOT_DETERMINED时,查询精确位置权限状态,返回此值。 |
737| RESTRICTED | 3     | 表示受限。<!--RP2-->应用被设置禁止通过[requestPermissionsFromUser](#requestpermissionsfromuser9)接口请求用户授权。<!--RP2End--> |