js-apis-abilityAccessCtrl.md 23.7 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
Z
zengyawen 已提交
32 33 34 35 36 37 38
var AtManager = abilityAccessCtrl.createAtManager();
```

## 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
**参数:**

| 参数名   | 类型                 | 必填 | 说明                                       |
| -------- | -------------------  | ---- | ------------------------------------------ |
F
fanchenxuan 已提交
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 72 73 74 75 76 77 78 79 80 81 82

let AtManager = abilityAccessCtrl.createAtManager();
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
try {
    AtManager.checkAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS").then((data) => {
        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 116 117
**示例:**

```js
var AtManager = abilityAccessCtrl.createAtManager();
let tokenID = 0;
F
fanchenxuan 已提交
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

**参数:**

| 参数名    | 类型                | 必填 | 说明                                                         |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
C
chennian 已提交
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 163 164

let AtManager = abilityAccessCtrl.createAtManager();
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
Y
yuyaozhi 已提交
165
let permissionFlag = 1;
C
chennian 已提交
166 167 168 169 170 171 172 173 174
try {
    AtManager.grantUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag).then(() => {
        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

**参数:**

| 参数名    | 类型                | 必填 | 说明                          |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
C
chennian 已提交
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

213
var 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

**参数:**

| 参数名    | 类型                | 必填 | 说明                                                         |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
C
chennian 已提交
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 270 271

let AtManager = abilityAccessCtrl.createAtManager();
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
Z
zengyawen 已提交
272
let permissionFlag = 1;
C
chennian 已提交
273 274 275 276 277 278 279 280 281
try {
    AtManager.revokeUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag).then(() => {
        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

**参数:**

| 参数名    | 类型                | 必填 | 说明                          |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
C
chennian 已提交
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

320
var 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
**参数:**

| 参数名    | 类型                | 必填 | 说明                          |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
C
chennian 已提交
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 376 377 378 379 380 381 382 383 384 385 386 387

let AtManager = abilityAccessCtrl.createAtManager();
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
let permissionFlag = 1;
try {
    AtManager.getPermissionFlags(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS").then((data) => {
        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 409 410 411 412 413 414 415

**示例:**

```js
var AtManager = abilityAccessCtrl.createAtManager();
let promise = AtManager.getVersion();
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 453
let tokenIDList: Array<number> = [];
let permissionNameList: Array<string> = [];
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 499
let tokenIDList: Array<number> = [];
let permissionNameList: Array<string> = [];
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 535 536 537 538 539 540 541 542
### 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';

var AtManager = abilityAccessCtrl.createAtManager();
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
let promise = AtManager.verifyAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
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 571 572 573 574 575 576 577 578

var AtManager = abilityAccessCtrl.createAtManager();
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
let promise = AtManager.verifyAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
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
| 名称           | 类型                       | 可读 | 可写 | 说明                |
| -------------- | ------------------------- | ---- | ---- | ------------------ |
L
lsq 已提交
613 614 615
| change         | [PermissionStateChangeType](#permissionstatechangetype9) | 是   | 否   | 权限授权状态变化类型        |
| tokenID        | number                    | 是   | 否   | 被订阅的应用身份标识 |
| permissionName | string                    | 是   | 否   | 当前授权状态发生变化的权限名 |