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<GrantStatus> 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<[GrantStatus](#grantstatus)> | 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<Permissions>, callback: Callback<PermissionStateChangeInfo>): 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<[Permissions](../../security/AccessToken/app-permissions.md)> | 是 | 订阅的权限名列表,如果为空,则表示订阅所有的权限状态变化,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。| 159| callback | Callback<[PermissionStateChangeInfo](#permissionstatechangeinfo18)> | 是 | 订阅指定权限名状态变更事件的回调。| 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<Permissions>, callback?: Callback<PermissionStateChangeInfo>): 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<[Permissions](../../security/AccessToken/app-permissions.md)> | 是 | 取消订阅的权限名列表,为空时表示取消订阅所有的权限状态变化,必须与on的输入一致,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 | 206| callback | Callback<[PermissionStateChangeInfo](#permissionstatechangeinfo18)> | 否 | 取消订阅指定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<Permissions>, requestCallback: AsyncCallback<PermissionRequestResult>): 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 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<[Permissions](../../security/AccessToken/app-permissions.md)> | 是 | 权限名列表,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 | 257| requestCallback | AsyncCallback<[PermissionRequestResult](js-apis-permissionrequestresult.md)> | 是 | 回调函数,返回接口调用是否成功的结果。 | 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<Permissions>): Promise<PermissionRequestResult> 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<[Permissions](../../security/AccessToken/app-permissions.md)> | 是 | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/app-permissions.md)中查询。 | 311 312**返回值:** 313 314| 类型 | 说明 | 315| -------- | -------- | 316| Promise<[PermissionRequestResult](js-apis-permissionrequestresult.md)> | 返回一个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<Permissions>): Promise<Array<GrantStatus>> 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 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<[Permissions](../../security/AccessToken/app-permissions.md)> | 是 | 权限名列表,合法的权限名取值可在[应用权限组列表](../../security/AccessToken/app-permission-group-list.md)中查询。 | 372 373**返回值:** 374 375| 类型 | 说明 | 376| :------------ | :---------------------------------- | 377| Promise<Array<[GrantStatus](#grantstatus)>> | 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<boolean> 410 411用于UIAbility/UIExtensionAbility拉起全局开关设置弹框。 412 413在某些情况下,如果录音、拍照等功能被禁用,应用可拉起此弹框请求用户同意开启对应功能。如果当前全局开关的状态为开启,则不拉起弹框。 414 415<!--RP5--> 416 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<boolean> | 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<GrantStatus> 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<[GrantStatus](#grantstatus)> | 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<GrantStatus> 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<[GrantStatus](#grantstatus)> | 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--> |