js-apis-abilityAccessCtrl.md 15.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 39 40 41 42 43 44
var AtManager = abilityAccessCtrl.createAtManager();
```

## AtManager

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

### verifyAccessToken

verifyAccessToken(tokenID: number, permissionName: string): Promise<GrantStatus>

校验应用是否授予权限,使用Promise方式异步返回结果。

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

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

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

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
| Promise<GrantStatus> | Promise实例,用于获取异步返回的授权状态结果。 |

**示例:**

Z
zengyawen 已提交
62
```js
63
var AtManager = abilityAccessCtrl.createAtManager();
Z
zengyawen 已提交
64 65 66 67 68 69 70
let tokenID = 0;
let promise = AtManager.verifyAccessToken(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
promise.then(data => {
    console.log(`promise: data->${JSON.stringify(data)}`);
});
```

Z
zhouyan 已提交
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96
### verifyAccessTokenSync<sup>9+</sup>

verifyAccessTokenSync(tokenID: number, permissionName: string): GrantStatus

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

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

**参数:**

| 参数名   | 类型                 | 必填 | 说明                                       |
| -------- | -------------------  | ---- | ------------------------------------------ |
| tokenID   |  number   | 是   | 要校验应用的身份标识。              |
| permissionName | string | 是   | 需要校验的权限名称。 |

**返回值:**

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

**示例:**

```js
var AtManager = abilityAccessCtrl.createAtManager();
let tokenID = 0;
F
fanchenxuan 已提交
97
let data = AtManager.verifyAccessTokenSync(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
Z
zhouyan 已提交
98 99 100
console.log(`data->${JSON.stringify(data)}`);
```

Z
zengyawen 已提交
101 102 103 104 105 106
### grantUserGrantedPermission

grantUserGrantedPermission(tokenID: number, permissionName: string, permissionFlag: number): Promise&lt;number&gt;

授予应用user grant权限,使用Promise方式异步返回结果。

107
此接口为系统接口。
108

109 110 111
**需要权限:** ohos.permission.GRANT_SENSITIVE_PERMISSIONS

**系统能力:** SystemCapability.Security.AccessToken
Z
zengyawen 已提交
112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128

**参数:**

| 参数名    | 类型                | 必填 | 说明                                                         |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
| tokenID      | number              | 是   | 目标应用的身份标识。            |
| permissionName | string              | 是   | 被授予的权限名称。 |
| permissionFlag  | number | 是   | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。  |

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
| Promise&lt;number&gt; | Promise实例,用于获取异步返回的授权操作结果。 |

**示例:**

Z
zengyawen 已提交
129
```js
130
var AtManager = abilityAccessCtrl.createAtManager();
Z
zengyawen 已提交
131
let tokenID = 0;
Y
yuyaozhi 已提交
132
let permissionFlag = 1;
133
let promise = AtManager.grantUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag);
Z
zengyawen 已提交
134 135 136 137 138 139 140 141 142 143 144
promise.then(data => {
    console.log(`promise: data->${JSON.stringify(data)}`);
});
```

### grantUserGrantedPermission

grantUserGrantedPermission(tokenID: number, permissionName: string, permissionFlag: number, callback: AsyncCallback&lt;number&gt;): void

授予应用user grant权限,使用callback回调异步返回结果。

145
此接口为系统接口。
146

147 148 149
**需要权限:** ohos.permission.GRANT_SENSITIVE_PERMISSIONS

**系统能力:** SystemCapability.Security.AccessToken
Z
zengyawen 已提交
150 151 152 153 154 155 156 157 158 159 160 161

**参数:**

| 参数名    | 类型                | 必填 | 说明                          |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
| tokenID      | number              | 是   | 目标应用的身份标识。           |
| permissionName | string              | 是   | 被授予的权限名称。 |
| permissionFlag  | number | 是   | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。  |
| callback | AsyncCallback&lt;number&gt; | 是 | 检查授予应用user grant权限的操作结果同步的回调。 |

**示例:**

Z
zengyawen 已提交
162
```js
163
var AtManager = abilityAccessCtrl.createAtManager();
Z
zengyawen 已提交
164 165
let tokenID = 0;
let permissionFlag = 1;
166 167 168 169 170 171
AtManager.grantUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag, (err, data) => {
    if (err) {
        console.log(`callback: err->${JSON.stringify(err)}`);
    } else {
        console.log(`callback: data->${JSON.stringify(data)}`);
    }
Z
zengyawen 已提交
172 173 174 175 176 177 178 179 180
});
```

### revokeUserGrantedPermission

revokeUserGrantedPermission(tokenID: number, permissionName: string, permissionFlag: number): Promise&lt;number&gt;

撤销应用user grant权限,使用Promise方式异步返回结果。

181
此接口为系统接口。
182

183 184 185
**需要权限:** ohos.permission.REVOKE_SENSITIVE_PERMISSIONS

**系统能力:** SystemCapability.Security.AccessToken
Z
zengyawen 已提交
186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202

**参数:**

| 参数名    | 类型                | 必填 | 说明                                                         |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
| tokenID      | number              | 是   | 目标应用的身份标识。            |
| permissionName | string              | 是   | 被撤销的权限名称。 |
| permissionFlag  | number | 是   | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。  |

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
| Promise&lt;number&gt; | Promise实例,用于获取异步返回的授权操作结果。 |

**示例:**

Z
zengyawen 已提交
203
```js
204
var AtManager = abilityAccessCtrl.createAtManager();
Z
zengyawen 已提交
205 206 207 208 209 210 211 212 213 214 215 216 217 218
let tokenID = 0;
let permissionFlag = 1;
let promise = AtManager.revokeUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag);
promise.then(data => {
    console.log(`promise: data->${JSON.stringify(data)}`);
});
```

### revokeUserGrantedPermission

revokeUserGrantedPermission(tokenID: number, permissionName: string, permissionFlag: number, callback: AsyncCallback&lt;number&gt;): void

撤销应用user grant权限,使用callback回调异步返回结果。

219
此接口为系统接口。
220

221 222 223
**需要权限:** ohos.permission.REVOKE_SENSITIVE_PERMISSIONS

**系统能力:** SystemCapability.Security.AccessToken
Z
zengyawen 已提交
224 225 226 227 228 229 230 231 232 233 234 235

**参数:**

| 参数名    | 类型                | 必填 | 说明                          |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
| tokenID      | number              | 是   | 目标应用的身份标识。            |
| permissionName | string              | 是   | 被撤销的权限名称。 |
| permissionFlag  | number | 是   | 授权选项,1表示下次仍需弹窗,2表示允许、禁止后不再提醒,3表示系统授权不允许更改。  |
| callback | AsyncCallback&lt;number&gt; | 是 | 检查撤销应用user grant权限的操作结果同步的回调。 |

**示例:**

Z
zengyawen 已提交
236
```js
237
var AtManager = abilityAccessCtrl.createAtManager();
Z
zengyawen 已提交
238
let tokenID = 0;
Y
yuyaozhi 已提交
239
let permissionFlag = 1;
240 241 242 243 244 245
AtManager.revokeUserGrantedPermission(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS", permissionFlag, (err, data) => {
    if (err) {
        console.log(`callback: err->${JSON.stringify(err)}`);
    } else {
        console.log(`callback: data->${JSON.stringify(data)}`);
    }
Z
zengyawen 已提交
246 247 248 249 250 251 252 253 254
});
```

### getPermissionFlags

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

获取指定应用的指定权限的flag,使用Promise方式异步返回结果。

255
此接口为系统接口。
256

257
**需要权限:** ohos.permission.GET_SENSITIVE_PERMISSIONS or ohos.permission.GRANT_SENSITIVE_PERMISSIONS or ohos.permission.REVOKE_SENSITIVE_PERMISSIONS
258

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

Z
zengyawen 已提交
261 262 263 264 265 266 267 268 269 270 271 272 273 274 275
**参数:**

| 参数名    | 类型                | 必填 | 说明                          |
| --------- | ------------------- | ---- | ------------------------------------------------------------ |
| tokenID      | number              | 是   | 目标应用的身份标识。            |
| permissionName | string              | 是   | 查询的权限名称。 |

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
| Promise&lt;number&gt; | Promise实例,用于获取异步返回的查询结果。 |

**示例:**

Z
zengyawen 已提交
276
```js
277
var AtManager = abilityAccessCtrl.createAtManager();
Z
zengyawen 已提交
278 279 280 281 282
let tokenID = 0;
let promise = AtManager.getPermissionFlags(tokenID, "ohos.permission.GRANT_SENSITIVE_PERMISSIONS");
promise.then(data => {
    console.log(`promise: data->${JSON.stringify(data)}`);
});
L
l00520400 已提交
283 284
```

Z
zhouyan 已提交
285
### getVersion<sup>9+</sup>
Z
zhouyan 已提交
286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310

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

获取当前权限管理的数据版本,使用Promise方式异步返回结果。

此接口为系统接口。

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

**返回值:**

| 类型          | 说明                                |
| :------------ | :---------------------------------- |
| Promise&lt;number&gt; | Promise实例,用于获取异步返回的版本号。 |

**示例:**

```js
var AtManager = abilityAccessCtrl.createAtManager();
let promise = AtManager.getVersion();
promise.then(data => {
    console.log(`promise: data->${JSON.stringify(data)}`);
});
```

311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341
### on<sup>9+</sup>

on(type: 'permissionStateChange', tokenIDList: Array&lt;number&gt;, permissionNameList: Array&lt;string&gt;, callback: Callback&lt;PermissionStateChangeInfo&gt;): void;

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

此接口为系统接口。

**需要权限:** ohos.permission.GET_SENSITIVE_PERMISSIONS

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

**参数:**

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

**示例:**

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

function OnPermissionStateChanged(data){
    console.debug("receive permission state change, data:" + JSON.stringify(data));
}
let atManager = abilityAccessCtrl.createAtManager();
let type: 'permissionStateChange' = 'permissionStateChange';
F
fanchenxuan 已提交
342 343
let tokenIDList: Array<number> = [];
let permissionNameList: Array<string> = [];
344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379
try{
    atManager.on(type, tokenIDList, permissionNameList, OnPermissionStateChanged);
}
catch(err){
    console.error("on err:" + JSON.stringify(err));
}
```

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

off(type: 'permissionStateChange', tokenIDList: Array&lt;number&gt;, permissionNameList: Array&lt;string&gt;, callback?: Callback&lt;PermissionStateChangeInfo&gt;): void;

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

此接口为系统接口。

**需要权限:** ohos.permission.GET_SENSITIVE_PERMISSIONS

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

**参数:**

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

**示例:**

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

let atManager = abilityAccessCtrl.createAtManager();
let type: 'permissionStateChange' = 'permissionStateChange';
F
fanchenxuan 已提交
380 381
let tokenIDList: Array<number> = [];
let permissionNameList: Array<string> = [];
382 383 384 385 386 387 388 389
try{
    atManager.off(type, tokenIDList, permissionNameList);
}
catch(err){
    console.error("off err:" + JSON.stringify(err));
}
```

L
l00520400 已提交
390 391 392 393
### GrantStatus

表示授权状态的枚举。

394 395 396 397 398 399 400 401 402 403 404
**系统能力:** SystemCapability.Security.AccessToken

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

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

表示权限状态变化操作类型的枚举。

F
fanchenxuan 已提交
405 406
**系统接口:** 此接口为系统接口。

407 408 409 410 411
**系统能力:** SystemCapability.Security.AccessToken

| 名称                     | 默认值 | 描述              |
| ----------------------- | ------ | ----------------- |
| PERMISSION_REVOKED_OPER | 0      | 表示权限取消操作。 |
Z
zhouyan 已提交
412
| PERMISSION_GRANTED_OPER | 1      | 表示权限授予操作。 |
413 414 415

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

F
fanchenxuan 已提交
416 417
**系统接口:** 此接口为系统接口。

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

420 421 422 423 424
| 名称           | 类型                       | 可读 | 可写 | 说明                |
| -------------- | ------------------------- | ---- | ---- | ------------------ |
| change         | [PermissionStateChangeType](#permissionstatechangetype9) | 是   | 否   | 权限变化类型        |
| tokenID        | number                    | 是   | 否   | 调用方的应用身份标识 |
| permissionName | string                    | 是   | 否   | 状态发生变化的权限名 |