js-apis-abilityAccessCtrl.md 27.5 KB
Newer Older
Z
zengyawen 已提交
1
# @ohos.abilityAccessCtrl (程序访问控制管理)
2 3

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

Z
zengyawen 已提交
5
> **说明:**
Z
zengyawen 已提交
6 7 8 9
> 本模块首批接口从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
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
F
fanchenxuan 已提交
63

C
chennian 已提交
64 65
| 错误码ID | 错误信息 |
| -------- | -------- |
F
fanchenxuan 已提交
66
| 12100001 | The parameter is invalid. The tokenID is 0 |
C
chennian 已提交
67

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

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

C
chennian 已提交
73
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
74 75
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
try {
C
chennian 已提交
76
    atManager.checkAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS").then((data) => {
C
chennian 已提交
77 78 79 80 81 82 83
        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 已提交
84 85
```

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

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

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

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

**参数:**

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

**返回值:**

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

C
chennian 已提交
107 108 109
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
F
fanchenxuan 已提交
110

C
chennian 已提交
111 112
| 错误码ID | 错误信息 |
| -------- | -------- |
F
fanchenxuan 已提交
113
| 12100001 | The parameter is invalid. The tokenID is 0 |
C
chennian 已提交
114

Z
zhouyan 已提交
115 116 117
**示例:**

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

Z
zengyawen 已提交
124 125
### grantUserGrantedPermission

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

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

C
chennian 已提交
130
**系统接口:** 此接口为系统接口。
131

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

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

**参数:**

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

**返回值:**

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

C
chennian 已提交
150 151 152
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
F
fanchenxuan 已提交
153

C
chennian 已提交
154 155
| 错误码ID | 错误信息 |
| -------- | -------- |
F
fanchenxuan 已提交
156 157 158 159 160
| 12100001 | The parameter is invalid. The tokenID is 0 |
| 12100002 | The specified tokenID does not exist. |
| 12100003 | The specified permission does not exist. |
| 12100006 | The application specified by the tokenID is not allowed to be granted with the specified permission. Either the application is a sandbox or the tokenID is from a remote device. |
| 12100007 | Service is abnormal. |
C
chennian 已提交
161

Z
zengyawen 已提交
162 163
**示例:**

Z
zengyawen 已提交
164
```js
C
chennian 已提交
165
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
166

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

### grantUserGrantedPermission

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

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

C
chennian 已提交
187
**系统接口:** 此接口为系统接口。
188

C
chennian 已提交
189
**需要权限:** ohos.permission.GRANT_SENSITIVE_PERMISSIONS,仅系统应用可用。
190 191

**系统能力:** SystemCapability.Security.AccessToken
Z
zengyawen 已提交
192 193 194 195 196

**参数:**

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

**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
F
fanchenxuan 已提交
205

C
chennian 已提交
206 207
| 错误码ID | 错误信息 |
| -------- | -------- |
F
fanchenxuan 已提交
208
| 12100001 | The parameter is invalid. The tokenID is 0 |
C
chennian 已提交
209 210 211
| 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 已提交
212 213 214

**示例:**

Z
zengyawen 已提交
215
```js
C
chennian 已提交
216
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
217

C
chennian 已提交
218
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
219
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
Z
zengyawen 已提交
220
let permissionFlag = 1;
C
chennian 已提交
221
try {
C
chennian 已提交
222
    atManager.grantUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag, (err, data) => {
C
chennian 已提交
223 224 225 226 227 228 229 230 231
        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 已提交
232 233 234 235
```

### revokeUserGrantedPermission

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

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

C
chennian 已提交
240
**系统接口:** 此接口为系统接口。
241

C
chennian 已提交
242
**需要权限:** ohos.permission.REVOKE_SENSITIVE_PERMISSIONS,仅系统应用可用。
243 244

**系统能力:** SystemCapability.Security.AccessToken
Z
zengyawen 已提交
245 246 247 248 249

**参数:**

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

**返回值:**

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

C
chennian 已提交
260 261 262
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
F
fanchenxuan 已提交
263

C
chennian 已提交
264 265
| 错误码ID | 错误信息 |
| -------- | -------- |
F
fanchenxuan 已提交
266 267 268 269 270
| 12100001 | The parameter is invalid. The tokenID is 0 |
| 12100002 | The specified tokenID does not exist. |
| 12100003 | The specified permission does not exist. |
| 12100006 | The application specified by the tokenID is not allowed to be revoked with the specified permission. Either the application is a sandbox or the tokenID is from a remote device. |
| 12100007 | Service is abnormal. |
C
chennian 已提交
271

Z
zengyawen 已提交
272 273
**示例:**

Z
zengyawen 已提交
274
```js
C
chennian 已提交
275
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
276

C
chennian 已提交
277
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
278
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
Z
zengyawen 已提交
279
let permissionFlag = 1;
C
chennian 已提交
280
try {
C
chennian 已提交
281
    atManager.revokeUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag).then(() => {
C
chennian 已提交
282 283 284 285 286 287 288
        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 已提交
289 290 291 292
```

### revokeUserGrantedPermission

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

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

C
chennian 已提交
297
**系统接口:** 此接口为系统接口。
298

C
chennian 已提交
299
**需要权限:** ohos.permission.REVOKE_SENSITIVE_PERMISSIONS,仅系统应用可用。
300 301

**系统能力:** SystemCapability.Security.AccessToken
Z
zengyawen 已提交
302 303 304 305 306

**参数:**

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

**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
F
fanchenxuan 已提交
315

C
chennian 已提交
316 317
| 错误码ID | 错误信息 |
| -------- | -------- |
F
fanchenxuan 已提交
318
| 12100001 | The parameter is invalid. The tokenID is 0 |
C
chennian 已提交
319 320 321
| 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 已提交
322 323 324

**示例:**

Z
zengyawen 已提交
325
```js
C
chennian 已提交
326
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
327

C
chennian 已提交
328
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
329
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
Y
yuyaozhi 已提交
330
let permissionFlag = 1;
C
chennian 已提交
331
try {
C
chennian 已提交
332
    atManager.revokeUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag, (err, data) => {
C
chennian 已提交
333 334 335 336 337 338 339 340 341
        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 已提交
342 343 344 345
```

### getPermissionFlags

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

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

C
chennian 已提交
350
**系统接口:** 此接口为系统接口。
351

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

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

Z
zengyawen 已提交
356 357 358 359
**参数:**

| 参数名    | 类型                | 必填 | 说明                          |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
360
| tokenID      | number              | 是   | 目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundle-ApplicationInfo.md)获得。            |
L
lsq 已提交
361
| permissionName | Permissions              | 是   | 查询的权限名称。 |
Z
zengyawen 已提交
362 363 364 365 366

**返回值:**

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

C
chennian 已提交
369 370 371
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
F
fanchenxuan 已提交
372

C
chennian 已提交
373 374
| 错误码ID | 错误信息 |
| -------- | -------- |
F
fanchenxuan 已提交
375 376 377
| 12100001 | The parameter is invalid. The tokenID is 0 |
| 12100002 | The specified tokenID does not exist. |
| 12100003 | The specified permission does not exist. |
F
fanchenxuan 已提交
378
| 12100006 | The operation is not allowed. Either the application is a sandbox or the tokenID is from a remote device. |
F
fanchenxuan 已提交
379
| 12100007 | Service is abnormal. |
C
chennian 已提交
380

Z
zengyawen 已提交
381 382
**示例:**

Z
zengyawen 已提交
383
```js
C
chennian 已提交
384
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
385

C
chennian 已提交
386
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
387 388 389
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
let permissionFlag = 1;
try {
C
chennian 已提交
390
    atManager.getPermissionFlags(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS").then((data) => {
C
chennian 已提交
391
        console.log(`getPermissionFlags success, data->${JSON.stringify(data)}`);
F
fanchenxuan 已提交
392
    }).catch((err) => {
C
chennian 已提交
393 394 395 396 397
        console.log(`getPermissionFlags fail, err->${JSON.stringify(err)}`);
    });
} catch(err) {
    console.log(`catch err->${JSON.stringify(err)}`);
}
L
l00520400 已提交
398 399
```

Z
zhouyan 已提交
400
### getVersion<sup>9+</sup>
Z
zhouyan 已提交
401 402 403

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

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

C
chennian 已提交
406
**系统接口:** 此接口为系统接口。
Z
zhouyan 已提交
407 408 409 410 411 412 413

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

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
C
chennian 已提交
414
| Promise&lt;number&gt; | Promise对象。返回查询到的版本号。 |
Z
zhouyan 已提交
415 416 417 418

**示例:**

```js
C
chennian 已提交
419 420
let atManager = abilityAccessCtrl.createAtManager();
let promise = atManager.getVersion();
Z
zhouyan 已提交
421 422 423 424 425
promise.then(data => {
    console.log(`promise: data->${JSON.stringify(data)}`);
});
```

426 427
### on<sup>9+</sup>

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

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

C
chennian 已提交
432
**系统接口:** 此接口为系统接口。
433

C
chennian 已提交
434
**需要权限:** ohos.permission.GET_SENSITIVE_PERMISSIONS,仅系统应用可用。
435 436 437 438 439 440 441 442

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

**参数:**

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

C
chennian 已提交
447 448 449
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
F
fanchenxuan 已提交
450

C
chennian 已提交
451 452
| 错误码ID | 错误信息 |
| -------- | -------- |
F
fanchenxuan 已提交
453 454 455 456 457
| 12100001 | The parameter is invalid. The tokenID is 0 |
| 12100004 | The interface is called repeatedly with the same input. |
| 12100005 | The registration time has exceeded the limitation. |
| 12100007 | Service is abnormal. |
| 12100008 | Out of memory. |
C
chennian 已提交
458

459 460 461 462 463 464
**示例:**

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

let atManager = abilityAccessCtrl.createAtManager();
F
fanchenxuan 已提交
465
let tokenIDList: Array<number> = [];
F
fanchenxuan 已提交
466
let permissionNameList = [];
C
chennian 已提交
467 468 469 470 471 472
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)}`);
473 474 475 476 477
}
```

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

L
lsq 已提交
478
off(type: 'permissionStateChange', tokenIDList: Array&lt;number&gt;, permissionNameList: Array&lt;Permissions&gt;, callback?: Callback&lt;PermissionStateChangeInfo&gt;): void;
479 480 481

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

C
chennian 已提交
482
**系统接口:** 此接口为系统接口。
483

C
chennian 已提交
484
**需要权限:** ohos.permission.GET_SENSITIVE_PERMISSIONS,仅系统应用可用。
485 486 487 488 489 490 491 492

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

**参数:**

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

C
chennian 已提交
497 498 499
**错误码:**

以下错误码的详细介绍请参见[程序访问控制错误码](../errorcodes/errorcode-access-token.md)
F
fanchenxuan 已提交
500

C
chennian 已提交
501 502
| 错误码ID | 错误信息 |
| -------- | -------- |
F
fanchenxuan 已提交
503 504 505 506
| 12100001 | The parameter is invalid. The tokenID in list is all invalid |
| 12100004 | The interface is not used with |
| 12100007 | Service is abnormal. |
| 12100008 | Out of memory. |
C
chennian 已提交
507

508 509 510 511 512 513
**示例:**

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

let atManager = abilityAccessCtrl.createAtManager();
F
fanchenxuan 已提交
514
let tokenIDList: Array<number> = [];
F
fanchenxuan 已提交
515
let permissionNameList = [];
C
chennian 已提交
516 517 518 519
try {
    atManager.off('permissionStateChange', tokenIDList, permissionNameList);
} catch(err) {
    console.log(`catch err->${JSON.stringify(err)}`);
520 521 522
}
```

L
lsq 已提交
523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550
### 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 已提交
551
let atManager = abilityAccessCtrl.createAtManager();
L
lsq 已提交
552
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
C
chennian 已提交
553
let promise = atManager.verifyAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
L
lsq 已提交
554 555 556 557 558
promise.then(data => {
    console.log(`promise: data->${JSON.stringify(data)}`);
});
```

559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589
### requestPermissionsFromUser<sup>9+</sup>

requestPermissionsFromUser(context: Context, permissions: Array&lt;Permissions&gt;, requestCallback: AsyncCallback&lt;PermissionRequestResult&gt;) : void;

用于拉起弹框请求用户授权。使用callback异步回调。

**模型约束**:此接口仅可在Stage模型下使用。

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

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| context | Context | 是 | 请求权限的应用ability上下文context。 |
| permissions | Array&lt;Permissions&gt; | 是 | 权限列表。 |
| callback | AsyncCallback&lt;[PermissionRequestResult](js-apis-permissionrequestresult.md)&gt; | 是 | 回调函数,返回接口调用是否成功的结果。 |

**错误码:**

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

**示例:**

  ```js
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
let atManager = abilityAccessCtrl.createAtManager();
try {
590
    atManager.requestPermissionsFromUser(this.context, ["ohos.permission.CAMERA"], (err, data)=>{
591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635
        console.info("data:" + JSON.stringify(data));
        console.info("data permissions:" + data.permissions);
        console.info("data authResults:" + data.authResults);
    });
} catch(err) {
    console.log(`catch err->${JSON.stringify(err)}`);
}
  ```

### requestPermissionsFromUser<sup>9+</sup>

requestPermissionsFromUser(context: Context, permissions: Array&lt;Permissions&gt;) : Promise&lt;PermissionRequestResult&gt;;

用于拉起弹框请求用户授权。使用promise异步回调。

**模型约束**:此接口仅可在Stage模型下使用。

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

**参数:**

| 参数名 | 类型 | 必填 | 说明 |
| -------- | -------- | -------- | -------- |
| context | Context | 是 | 请求权限的应用ability上下文context。 |
| permissions | Array&lt;Permissions&gt; | 是 | 权限列表。 |

**返回值:**

| 类型 | 说明 |
| -------- | -------- |
| Promise&lt;[PermissionRequestResult](js-apis-permissionrequestresult.md)&gt; | 返回一个Promise,包含接口的结果。 |

**错误码:**

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

**示例:**

  ```js
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
let atManager = abilityAccessCtrl.createAtManager();
try {
636
    atManager.requestPermissionsFromUser(this.context, ["ohos.permission.CAMERA"]).then((data) => {
637 638 639 640 641 642 643 644 645 646 647
        console.info("data:" + JSON.stringify(data));
        console.info("data permissions:" + data.permissions);
        console.info("data authResults:" + data.authResults);
    }).catch((err) => {
        console.info("data:" + JSON.stringify(err));
    })
} catch(err) {
    console.log(`catch err->${JSON.stringify(err)}`);
}
  ```

C
chennian 已提交
648 649 650 651
### verifyAccessToken<sup>(deprecated)</sup>

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

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

C
chennian 已提交
654
> **说明:** 从API version 9开始不再维护,建议使用[checkAccessToken](#checkaccesstoken9)替代。
C
chennian 已提交
655 656 657 658 659 660 661

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

**参数:**

| 参数名   | 类型                 | 必填 | 说明                                       |
| -------- | -------------------  | ---- | ------------------------------------------ |
C
chennian 已提交
662
| tokenID   |  number   | 是   | 要校验的目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundle-ApplicationInfo.md)获得。             |
C
chennian 已提交
663 664 665 666 667 668 669 670 671 672 673
| permissionName | string | 是   | 需要校验的权限名称。 |

**返回值:**

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

**示例:**

```js
C
chennian 已提交
674
import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
C
chennian 已提交
675

C
chennian 已提交
676
let atManager = abilityAccessCtrl.createAtManager();
C
chennian 已提交
677
let tokenID = 0; // 可以通过getApplicationInfo获取accessTokenId
C
chennian 已提交
678
let promise = atManager.verifyAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
C
chennian 已提交
679 680 681 682 683
promise.then(data => {
    console.log(`promise: data->${JSON.stringify(data)}`);
});
```

L
l00520400 已提交
684 685 686 687
### GrantStatus

表示授权状态的枚举。

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

F
fanchenxuan 已提交
690
| 名称               |    值 | 说明        |
691 692 693 694 695 696
| ------------------ | ----- | ----------- |
| PERMISSION_DENIED  | -1    | 表示未授权。 |
| PERMISSION_GRANTED | 0     | 表示已授权。 |

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

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

F
fanchenxuan 已提交
699 700
**系统接口:** 此接口为系统接口。

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

F
fanchenxuan 已提交
703
| 名称                     |    值 | 说明              |
704 705
| ----------------------- | ------ | ----------------- |
| PERMISSION_REVOKED_OPER | 0      | 表示权限取消操作。 |
Z
zhouyan 已提交
706
| PERMISSION_GRANTED_OPER | 1      | 表示权限授予操作。 |
707 708 709

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

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

F
fanchenxuan 已提交
712 713
**系统接口:** 此接口为系统接口。

C
chennian 已提交
714
**系统能力:** SystemCapability.Security.AccessToken
715

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