js-apis-abilityAccessCtrl.md 23.8 KB
Newer Older
1 2 3
# 程序访问控制管理

程序访问控制提供程序的权限管理能力,包括鉴权、授权和取消授权等。
Z
zengyawen 已提交
4 5 6 7 8 9

> ![icon-note.gif](public_sys-resources/icon-note.gif) **说明:**
> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。

## 导入模块

Z
zengyawen 已提交
10
```js
Z
zengyawen 已提交
11 12 13 14 15 16 17 18 19
import abilityAccessCtrl from '@ohos.abilityAccessCtrl'
```

## abilityAccessCtrl.createAtManager

createAtManager(): AtManager

访问控制管理:获取访问控制模块对象。

20 21 22
**系统能力:** SystemCapability.Security.AccessToken


Z
zengyawen 已提交
23 24 25 26 27 28 29 30
**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| [AtManager](#atmanager) | 获取访问控制模块的实例。 |

**示例:**

Z
zengyawen 已提交
31
```js
C
chennian 已提交
32
let atManager = abilityAccessCtrl.createAtManager();
Z
zengyawen 已提交
33 34 35 36 37 38
```

## AtManager

管理访问控制模块的实例。

C
chennian 已提交
39
### checkAccessToken<sup>9+</sup>
Z
zengyawen 已提交
40

L
lsq 已提交
41
checkAccessToken(tokenID: number, permissionName: Permissions): Promise&lt;GrantStatus&gt;
Z
zengyawen 已提交
42

C
chennian 已提交
43
校验应用是否授予权限。使用Promise异步回调。
Z
zengyawen 已提交
44

45 46
**系统能力:** SystemCapability.Security.AccessToken

Z
zengyawen 已提交
47 48 49 50
**参数:**

| 参数名   | 类型                 | 必填 | 说明                                       |
| -------- | -------------------  | ---- | ------------------------------------------ |
51
| tokenID   |  number   | 是   | 要校验的目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundle-ApplicationInfo.md)获得。             |
L
lsq 已提交
52
| permissionName | Permissions | 是   | 需要校验的权限名称。 |
Z
zengyawen 已提交
53 54 55 56 57

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
C
chennian 已提交
58
| Promise&lt;GrantStatus&gt; | Promise对象。返回授权状态结果。 |
Z
zengyawen 已提交
59

C
chennian 已提交
60 61 62 63 64 65 66
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
| 错误码ID | 错误信息 |
| -------- | -------- |
| 12100001 | Parameter invalid. |

Z
zengyawen 已提交
67 68
**示例:**

Z
zengyawen 已提交
69
```js
C
chennian 已提交
70
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
71

C
chennian 已提交
72
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
73 74
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
try {
C
chennian 已提交
75
    atManager.checkAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS").then((data) => {
C
chennian 已提交
76 77 78 79 80 81 82
        console.log(`checkAccessToken success, data->${JSON.stringify(data)}`);
    }).catch((err) => {
        console.log(`checkAccessToken fail, err->${JSON.stringify(err)}`);
    });
} catch(err) {
    console.log(`catch err->${JSON.stringify(err)}`);
}
Z
zengyawen 已提交
83 84
```

Z
zhouyan 已提交
85 86
### verifyAccessTokenSync<sup>9+</sup>

L
lsq 已提交
87
verifyAccessTokenSync(tokenID: number, permissionName: Permissions): GrantStatus
Z
zhouyan 已提交
88 89 90 91 92 93 94 95 96 97

校验应用是否被授予权限,同步返回结果。

**系统能力:** SystemCapability.Security.AccessToken

**参数:**

| 参数名   | 类型                 | 必填 | 说明                                       |
| -------- | -------------------  | ---- | ------------------------------------------ |
| tokenID   |  number   | 是   | 要校验应用的身份标识。              |
L
lsq 已提交
98
| permissionName | Permissions | 是   | 需要校验的权限名称。 |
Z
zhouyan 已提交
99 100 101 102 103 104 105

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
| [GrantStatus](#grantstatus) | 枚举实例,返回授权状态。 |

C
chennian 已提交
106 107 108 109 110 111 112
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
| 错误码ID | 错误信息 |
| -------- | -------- |
| 12100001 | Parameter invalid. |

Z
zhouyan 已提交
113 114 115
**示例:**

```js
C
chennian 已提交
116
let atManager = abilityAccessCtrl.createAtManager();
Z
zhouyan 已提交
117
let tokenID = 0;
C
chennian 已提交
118
let data = atManager.verifyAccessTokenSync(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
Z
zhouyan 已提交
119 120 121
console.log(`data->${JSON.stringify(data)}`);
```

Z
zengyawen 已提交
122 123
### grantUserGrantedPermission

L
lsq 已提交
124
grantUserGrantedPermission(tokenID: number, permissionName: Permissions, permissionFlag: number): Promise&lt;void&gt;
Z
zengyawen 已提交
125

C
chennian 已提交
126
授予应用user grant权限。使用Promise异步回调。
Z
zengyawen 已提交
127

C
chennian 已提交
128
**系统接口:** 此接口为系统接口。
129

C
chennian 已提交
130
**需要权限:** ohos.permission.GRANT_SENSITIVE_PERMISSIONS,仅系统应用可用。
131 132

**系统能力:** SystemCapability.Security.AccessToken
Z
zengyawen 已提交
133 134 135 136 137

**参数:**

| 参数名    | 类型                | 必填 | 说明                                                         |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
138
| tokenID      | number              | 是   | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundle-ApplicationInfo.md)获得。            |
L
lsq 已提交
139
| permissionName | Permissions              | 是   | 被授予的权限名称。 |
Z
zengyawen 已提交
140 141 142 143 144 145
| permissionFlag  | number | 是   | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。  |

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
C
chennian 已提交
146
| Promise&lt;void&gt; | Promise对象。无返回结果的Promise对象。 |
Z
zengyawen 已提交
147

C
chennian 已提交
148 149 150 151 152 153 154 155 156 157
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
| 错误码ID | 错误信息 |
| -------- | -------- |
| 12100001 | Parameter invalid. |
| 12100002 | TokenId does not exist. |
| 12100003 | Permission does not exist. |
| 12100006 | The specified application does not support the permissions granted or ungranted as specified. |

Z
zengyawen 已提交
158 159
**示例:**

Z
zengyawen 已提交
160
```js
C
chennian 已提交
161
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
162

C
chennian 已提交
163
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
164
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
Y
yuyaozhi 已提交
165
let permissionFlag = 1;
C
chennian 已提交
166
try {
C
chennian 已提交
167
    atManager.grantUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag).then(() => {
C
chennian 已提交
168 169 170 171 172 173 174
        console.log('grantUserGrantedPermission success');
    }).catch((err) => {
        console.log(`grantUserGrantedPermission fail, err->${JSON.stringify(err)}`);
    });
} catch(err) {
    console.log(`catch err->${JSON.stringify(err)}`);
}
Z
zengyawen 已提交
175 176 177 178
```

### grantUserGrantedPermission

L
lsq 已提交
179
grantUserGrantedPermission(tokenID: number, permissionName: Permissions, permissionFlag: number, callback: AsyncCallback&lt;void&gt;): void
Z
zengyawen 已提交
180

C
chennian 已提交
181
授予应用user grant权限。使用callback异步回调。
Z
zengyawen 已提交
182

C
chennian 已提交
183
**系统接口:** 此接口为系统接口。
184

C
chennian 已提交
185
**需要权限:** ohos.permission.GRANT_SENSITIVE_PERMISSIONS,仅系统应用可用。
186 187

**系统能力:** SystemCapability.Security.AccessToken
Z
zengyawen 已提交
188 189 190 191 192

**参数:**

| 参数名    | 类型                | 必填 | 说明                          |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
193
| tokenID      | number              | 是   | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundle-ApplicationInfo.md)获得。|
L
lsq 已提交
194
| permissionName | Permissions              | 是   | 被授予的权限名称。 |
Z
zengyawen 已提交
195
| permissionFlag  | number | 是   | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。  |
C
chennian 已提交
196 197 198 199 200 201 202 203 204 205 206
| callback | AsyncCallback&lt;void&gt; | 是 | 授予应用user grant权限。当授予权限成功时,err为undefine;否则为错误对象。 |

**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
| 错误码ID | 错误信息 |
| -------- | -------- |
| 12100001 | Parameter invalid. |
| 12100002 | TokenId does not exist. |
| 12100003 | Permission does not exist. |
| 12100006 | The specified application does not support the permissions granted or ungranted as specified. |
Z
zengyawen 已提交
207 208 209

**示例:**

Z
zengyawen 已提交
210
```js
C
chennian 已提交
211
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
212

C
chennian 已提交
213
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
214
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
Z
zengyawen 已提交
215
let permissionFlag = 1;
C
chennian 已提交
216
try {
C
chennian 已提交
217
    atManager.grantUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag, (err, data) => {
C
chennian 已提交
218 219 220 221 222 223 224 225 226
        if (err) {
            console.log(`grantUserGrantedPermission fail, err->${JSON.stringify(err)}`);
        } else {
            console.log('grantUserGrantedPermission success');
        }
    });
} catch(err) {
    console.log(`catch err->${JSON.stringify(err)}`);
}
Z
zengyawen 已提交
227 228 229 230
```

### revokeUserGrantedPermission

L
lsq 已提交
231
revokeUserGrantedPermission(tokenID: number, permissionName: Permissions, permissionFlag: number): Promise&lt;void&gt;
Z
zengyawen 已提交
232

C
chennian 已提交
233
撤销应用user grant权限。使用Promise异步回调。
Z
zengyawen 已提交
234

C
chennian 已提交
235
**系统接口:** 此接口为系统接口。
236

C
chennian 已提交
237
**需要权限:** ohos.permission.REVOKE_SENSITIVE_PERMISSIONS,仅系统应用可用。
238 239

**系统能力:** SystemCapability.Security.AccessToken
Z
zengyawen 已提交
240 241 242 243 244

**参数:**

| 参数名    | 类型                | 必填 | 说明                                                         |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
245
| tokenID      | number              | 是   | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundle-ApplicationInfo.md)获得。           |
L
lsq 已提交
246
| permissionName | Permissions              | 是   | 被撤销的权限名称。 |
Z
zengyawen 已提交
247 248 249 250 251 252
| permissionFlag  | number | 是   | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。  |

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
C
chennian 已提交
253
| Promise&lt;void&gt; | Promise对象。无返回结果的Promise对象。 |
Z
zengyawen 已提交
254

C
chennian 已提交
255 256 257 258 259 260 261 262 263 264
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
| 错误码ID | 错误信息 |
| -------- | -------- |
| 12100001 | Parameter invalid. |
| 12100002 | TokenId does not exist. |
| 12100003 | Permission does not exist. |
| 12100006 | The specified application does not support the permissions granted or ungranted as specified. |

Z
zengyawen 已提交
265 266
**示例:**

Z
zengyawen 已提交
267
```js
C
chennian 已提交
268
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
269

C
chennian 已提交
270
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
271
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
Z
zengyawen 已提交
272
let permissionFlag = 1;
C
chennian 已提交
273
try {
C
chennian 已提交
274
    atManager.revokeUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag).then(() => {
C
chennian 已提交
275 276 277 278 279 280 281
        console.log('revokeUserGrantedPermission success');
    }).catch((err) => {
        console.log(`revokeUserGrantedPermission fail, err->${JSON.stringify(err)}`);
    });
} catch(err) {
    console.log(`catch err->${JSON.stringify(err)}`);
}
Z
zengyawen 已提交
282 283 284 285
```

### revokeUserGrantedPermission

L
lsq 已提交
286
revokeUserGrantedPermission(tokenID: number, permissionName: Permissions, permissionFlag: number, callback: AsyncCallback&lt;void&gt;): void
Z
zengyawen 已提交
287

C
chennian 已提交
288
撤销应用user grant权限。使用callback异步回调。
Z
zengyawen 已提交
289

C
chennian 已提交
290
**系统接口:** 此接口为系统接口。
291

C
chennian 已提交
292
**需要权限:** ohos.permission.REVOKE_SENSITIVE_PERMISSIONS,仅系统应用可用。
293 294

**系统能力:** SystemCapability.Security.AccessToken
Z
zengyawen 已提交
295 296 297 298 299

**参数:**

| 参数名    | 类型                | 必填 | 说明                          |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
300
| tokenID      | number              | 是   | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundle-ApplicationInfo.md)获得。           |
L
lsq 已提交
301
| permissionName | Permissions              | 是   | 被撤销的权限名称。 |
Z
zengyawen 已提交
302
| permissionFlag  | number | 是   | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。  |
C
chennian 已提交
303 304 305 306 307 308 309 310 311 312 313
| callback | AsyncCallback&lt;void&gt; | 是 | 撤销应用user grant权限。当撤销权限成功时,err为undefine;否则为错误对象。 |

**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
| 错误码ID | 错误信息 |
| -------- | -------- |
| 12100001 | Parameter invalid. |
| 12100002 | TokenId does not exist. |
| 12100003 | Permission does not exist. |
| 12100006 | The specified application does not support the permissions granted or ungranted as specified. |
Z
zengyawen 已提交
314 315 316

**示例:**

Z
zengyawen 已提交
317
```js
C
chennian 已提交
318
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
319

C
chennian 已提交
320
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
321
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
Y
yuyaozhi 已提交
322
let permissionFlag = 1;
C
chennian 已提交
323
try {
C
chennian 已提交
324
    atManager.revokeUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag, (err, data) => {
C
chennian 已提交
325 326 327 328 329 330 331 332 333
        if (err) {
            console.log(`revokeUserGrantedPermission fail, err->${JSON.stringify(err)}`);
        } else {
            console.log('revokeUserGrantedPermission success');
        }
    });
} catch(err) {
    console.log(`catch err->${JSON.stringify(err)}`);
}
Z
zengyawen 已提交
334 335 336 337
```

### getPermissionFlags

L
lsq 已提交
338
getPermissionFlags(tokenID: number, permissionName: Permissions): Promise&lt;number&gt;
Z
zengyawen 已提交
339

C
chennian 已提交
340
获取指定应用的指定权限的flag。使用Promise异步回调。
Z
zengyawen 已提交
341

C
chennian 已提交
342
**系统接口:** 此接口为系统接口。
343

C
chennian 已提交
344
**需要权限:** ohos.permission.GET_SENSITIVE_PERMISSIONS or ohos.permission.GRANT_SENSITIVE_PERMISSIONS or ohos.permission.REVOKE_SENSITIVE_PERMISSIONS,仅系统应用可用。
345

346 347
**系统能力:** SystemCapability.Security.AccessToken

Z
zengyawen 已提交
348 349 350 351
**参数:**

| 参数名    | 类型                | 必填 | 说明                          |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
352
| tokenID      | number              | 是   | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundle-ApplicationInfo.md)获得。            |
L
lsq 已提交
353
| permissionName | Permissions              | 是   | 查询的权限名称。 |
Z
zengyawen 已提交
354 355 356 357 358

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
C
chennian 已提交
359
| Promise&lt;number&gt; | Promise对象。返回查询结果。 |
Z
zengyawen 已提交
360

C
chennian 已提交
361 362 363 364 365 366 367 368 369 370
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
| 错误码ID | 错误信息 |
| -------- | -------- |
| 12100001 | Parameter invalid. |
| 12100002 | TokenId does not exist. |
| 12100003 | Permission does not exist. |
| 12100006 | The specified application does not support the permissions granted or ungranted as specified. |

Z
zengyawen 已提交
371 372
**示例:**

Z
zengyawen 已提交
373
```js
C
chennian 已提交
374
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
375

C
chennian 已提交
376
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
377 378 379
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
let permissionFlag = 1;
try {
C
chennian 已提交
380
    atManager.getPermissionFlags(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS").then((data) => {
C
chennian 已提交
381 382 383 384 385 386 387
        console.log(`getPermissionFlags success, data->${JSON.stringify(data)}`);
    }).catch((err) = > {
        console.log(`getPermissionFlags fail, err->${JSON.stringify(err)}`);
    });
} catch(err) {
    console.log(`catch err->${JSON.stringify(err)}`);
}
L
l00520400 已提交
388 389
```

Z
zhouyan 已提交
390
### getVersion<sup>9+</sup>
Z
zhouyan 已提交
391 392 393

getVersion(): Promise&lt;number&gt;

C
chennian 已提交
394
获取当前权限管理的数据版本。使用Promise异步回调。
Z
zhouyan 已提交
395

C
chennian 已提交
396
**系统接口:** 此接口为系统接口。
Z
zhouyan 已提交
397 398 399 400 401 402 403

**系统能力:** SystemCapability.Security.AccessToken

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
C
chennian 已提交
404
| Promise&lt;number&gt; | Promise对象。返回查询到的版本号。 |
Z
zhouyan 已提交
405 406 407 408

**示例:**

```js
C
chennian 已提交
409 410
let atManager = abilityAccessCtrl.createAtManager();
let promise = atManager.getVersion();
Z
zhouyan 已提交
411 412 413 414 415
promise.then(data => {
    console.log(`promise: data->${JSON.stringify(data)}`);
});
```

416 417
### on<sup>9+</sup>

L
lsq 已提交
418
on(type: 'permissionStateChange', tokenIDList: Array&lt;number&gt;, permissionNameList: Array&lt;Permissions&gt;, callback: Callback&lt;PermissionStateChangeInfo&gt;): void;
419

C
chennian 已提交
420
订阅指定tokenId列表与权限列表的权限状态变更事件。
421

C
chennian 已提交
422
**系统接口:** 此接口为系统接口。
423

C
chennian 已提交
424
**需要权限:** ohos.permission.GET_SENSITIVE_PERMISSIONS,仅系统应用可用。
425 426 427 428 429 430 431 432 433

**系统能力:** SystemCapability.Security.AccessToken

**参数:**

| 参数名             | 类型                   | 必填 | 说明                                                          |
| ------------------ | --------------------- | ---- | ------------------------------------------------------------ |
| type               | string                | 是   | 订阅事件类型,固定为'permissionStateChange',权限状态变更事件。  |
| tokenIDList        | Array&lt;number&gt;   | 否   | 订阅的tokenId列表,为空时表示订阅所有的应用的权限状态变化。        |
L
lsq 已提交
434
| permissionNameList | Array&lt;Permissions&gt;   | 否   | 订阅的权限名列表,为空时表示订阅所有的权限状态变化。               |
435 436
| callback | Callback&lt;[PermissionStateChangeInfo](#permissionstatechangeinfo9)&gt; | 是 | 订阅指定tokenId与指定权限名状态变更事件的回调。|

C
chennian 已提交
437 438 439 440 441 442 443 444 445
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
| 错误码ID | 错误信息 |
| -------- | -------- |
| 12100001 | Parameter invalid. |
| 12100004 | The listener interface is not used together. |
| 12100005 | The number of listeners exceeds the limit. |

446 447 448 449 450 451
**示例:**

```js
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

let atManager = abilityAccessCtrl.createAtManager();
F
fanchenxuan 已提交
452
let tokenIDList: Array<number> = [];
L
补充  
lsq 已提交
453
let permissionNameList: Array<Permissions> = [];
C
chennian 已提交
454 455 456 457 458 459
try {
    atManager.on('permissionStateChange', tokenIDList, permissionNameList, (data) => {
        console.debug("receive permission state change, data:" + JSON.stringify(data));
    });
} catch(err) {
    console.log(`catch err->${JSON.stringify(err)}`);
460 461 462 463 464
}
```

### off<sup>9+</sup>

L
lsq 已提交
465
off(type: 'permissionStateChange', tokenIDList: Array&lt;number&gt;, permissionNameList: Array&lt;Permissions&gt;, callback?: Callback&lt;PermissionStateChangeInfo&gt;): void;
466 467 468

取消订阅指定tokenId列表与权限列表的权限状态变更事件,使用callback回调异步返回结果。

C
chennian 已提交
469
**系统接口:** 此接口为系统接口。
470

C
chennian 已提交
471
**需要权限:** ohos.permission.GET_SENSITIVE_PERMISSIONS,仅系统应用可用。
472 473 474 475 476 477 478 479 480

**系统能力:** SystemCapability.Security.AccessToken

**参数:**

| 参数名             | 类型                   | 必填 | 说明                                                          |
| ------------------ | --------------------- | ---- | ------------------------------------------------------------ |
| type               | string                | 是   | 订阅事件类型,固定为'permissionStateChange',权限状态变更事件。  |
| tokenIDList        | Array&lt;number&gt;   | 否   | 订阅的tokenId列表,为空时表示订阅所有的应用的权限状态变化,必须与on的输入一致。 |
L
lsq 已提交
481
| permissionNameList | Array&lt;Permissions&gt;   | 否   | 订阅的权限名列表,为空时表示订阅所有的权限状态变化,必须与on的输入一致。 |
482 483
| callback | Callback&lt;[PermissionStateChangeInfo](#permissionstatechangeinfo9)&gt; | 否 | 取消订阅指定tokenId与指定权限名状态变更事件的回调。|

C
chennian 已提交
484 485 486 487 488 489 490 491
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
| 错误码ID | 错误信息 |
| -------- | -------- |
| 12100001 | Parameter invalid. |
| 12100004 | The listener interface is not used together. |

492 493 494 495 496 497
**示例:**

```js
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

let atManager = abilityAccessCtrl.createAtManager();
F
fanchenxuan 已提交
498
let tokenIDList: Array<number> = [];
L
补充  
lsq 已提交
499
let permissionNameList: Array<Permissions> = [];
C
chennian 已提交
500 501 502 503
try {
    atManager.off('permissionStateChange', tokenIDList, permissionNameList);
} catch(err) {
    console.log(`catch err->${JSON.stringify(err)}`);
504 505 506
}
```

L
lsq 已提交
507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534
### verifyAccessToken<sup>9+</sup>

verifyAccessToken(tokenID: number, permissionName: Permissions): Promise&lt;GrantStatus&gt;

校验应用是否授予权限。使用Promise异步回调。

> **说明:** 建议使用[checkAccessToken](#checkaccesstoken9)替代。

**系统能力:** SystemCapability.Security.AccessToken

**参数:**

| 参数名   | 类型                 | 必填 | 说明                                       |
| -------- | -------------------  | ---- | ------------------------------------------ |
| tokenID   |  number   | 是   | 要校验的目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundle-ApplicationInfo.md)获得。             |
| permissionName | Permissions | 是   | 需要校验的权限名称。仅支持输入有效的权限名称。 |

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
| Promise&lt;GrantStatus&gt; | Promise对象。返回授权状态结果。 |

**示例:**

```js
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';

C
chennian 已提交
535
let atManager = abilityAccessCtrl.createAtManager();
L
lsq 已提交
536
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
C
chennian 已提交
537
let promise = atManager.verifyAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
L
lsq 已提交
538 539 540 541 542
promise.then(data => {
    console.log(`promise: data->${JSON.stringify(data)}`);
});
```

C
chennian 已提交
543 544 545 546
### verifyAccessToken<sup>(deprecated)</sup>

verifyAccessToken(tokenID: number, permissionName: string): Promise&lt;GrantStatus&gt;

C
chennian 已提交
547
校验应用是否授予权限。使用Promise异步回调。
C
chennian 已提交
548

C
chennian 已提交
549
> **说明:** 从API version 9开始不再维护,建议使用[checkAccessToken](#checkaccesstoken9)替代。
C
chennian 已提交
550 551 552 553 554 555 556

**系统能力:** SystemCapability.Security.AccessToken

**参数:**

| 参数名   | 类型                 | 必填 | 说明                                       |
| -------- | -------------------  | ---- | ------------------------------------------ |
C
chennian 已提交
557
| tokenID   |  number   | 是   | 要校验的目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundle-ApplicationInfo.md)获得。             |
C
chennian 已提交
558 559 560 561 562 563 564 565 566 567 568
| permissionName | string | 是   | 需要校验的权限名称。 |

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
| Promise&lt;GrantStatus&gt; | Promise对象。返回授权状态结果。 |

**示例:**

```js
C
chennian 已提交
569
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
570

C
chennian 已提交
571
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
572
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
C
chennian 已提交
573
let promise = atManager.verifyAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
C
chennian 已提交
574 575 576 577 578
promise.then(data => {
    console.log(`promise: data->${JSON.stringify(data)}`);
});
```

L
l00520400 已提交
579 580 581 582
### GrantStatus

表示授权状态的枚举。

583 584 585 586 587 588 589 590 591
**系统能力:** SystemCapability.Security.AccessToken

| 名称               | 默认值 | 描述        |
| ------------------ | ----- | ----------- |
| PERMISSION_DENIED  | -1    | 表示未授权。 |
| PERMISSION_GRANTED | 0     | 表示已授权。 |

### PermissionStateChangeType<sup>9+</sup>

L
lsq 已提交
592
表示权限授权状态变化操作类型的枚举。
593

F
fanchenxuan 已提交
594 595
**系统接口:** 此接口为系统接口。

596 597 598 599 600
**系统能力:** SystemCapability.Security.AccessToken

| 名称                     | 默认值 | 描述              |
| ----------------------- | ------ | ----------------- |
| PERMISSION_REVOKED_OPER | 0      | 表示权限取消操作。 |
Z
zhouyan 已提交
601
| PERMISSION_GRANTED_OPER | 1      | 表示权限授予操作。 |
602 603 604

### PermissionStateChangeInfo<sup>9+</sup>

L
lsq 已提交
605 606
表示某次权限授权状态变化的详情。

F
fanchenxuan 已提交
607 608
**系统接口:** 此接口为系统接口。

C
chennian 已提交
609
**系统能力:** SystemCapability.Security.AccessToken
610

611 612
| 名称           | 类型                       | 可读 | 可写 | 说明                |
| -------------- | ------------------------- | ---- | ---- | ------------------ |
613 614 615
| change         | [PermissionStateChangeType](#permissionstatechangetype9) | 是   | 否   | 权限授权状态变化类型。        |
| tokenID        | number                    | 是   | 否   | 被订阅的应用身份标识。 |
| permissionName | Permissions                    | 是   | 否   | 当前授权状态发生变化的权限名。 |