• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1# @ohos.abilityAccessCtrl (程序访问控制管理)
2
3程序访问控制提供程序的权限管理能力,包括鉴权、授权和取消授权等。
4
5> **说明:**
6> 本模块首批接口从API version 8开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。
7
8## 导入模块
9
10```ts
11import abilityAccessCtrl from '@ohos.abilityAccessCtrl'
12```
13
14## abilityAccessCtrl.createAtManager
15
16createAtManager(): AtManager
17
18访问控制管理:获取访问控制模块对象。
19
20**系统能力:** SystemCapability.Security.AccessToken
21
22
23**返回值:**
24
25| 类型 | 说明 |
26| -------- | -------- |
27| [AtManager](#atmanager) | 获取访问控制模块的实例。 |
28
29**示例:**
30
31```ts
32let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
33```
34
35## AtManager
36
37管理访问控制模块的实例。
38
39### checkAccessToken<sup>9+</sup>
40
41checkAccessToken(tokenID: number, permissionName: Permissions): Promise&lt;GrantStatus&gt;
42
43校验应用是否授予权限。使用Promise异步回调。
44
45**系统能力:** SystemCapability.Security.AccessToken
46
47**参数:**
48
49| 参数名   | 类型                 | 必填 | 说明                                       |
50| -------- | -------------------  | ---- | ------------------------------------------ |
51| tokenID   |  number   | 是   | 要校验的目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。             |
52| permissionName | Permissions | 是   | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/permissions-for-all.md)中查询。 |
53
54**返回值:**
55
56| 类型          | 说明                                |
57| :------------ | :---------------------------------- |
58| Promise&lt;GrantStatus&gt; | Promise对象。返回授权状态结果。 |
59
60**错误码:**
61
62以下错误码的详细介绍请参见[访问控制错误码](errorcode-access-token.md)。
63
64| 错误码ID | 错误信息 |
65| -------- | -------- |
66| 12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256. |
67
68**示例:**
69
70```ts
71import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
72import { BusinessError } from '@ohos.base';
73
74let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
75let tokenID: number = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取
76atManager.checkAccessToken(tokenID, 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS').then((data: abilityAccessCtrl.GrantStatus) => {
77  console.log(`checkAccessToken success, data->${JSON.stringify(data)}`);
78}).catch((err: BusinessError) => {
79  console.log(`checkAccessToken fail, err->${JSON.stringify(err)}`);
80});
81```
82
83### verifyAccessTokenSync<sup>9+</sup>
84
85verifyAccessTokenSync(tokenID: number, permissionName: Permissions): GrantStatus
86
87校验应用是否被授予权限,同步返回结果。
88
89**系统能力:** SystemCapability.Security.AccessToken
90
91**参数:**
92
93| 参数名   | 类型                 | 必填 | 说明                                       |
94| -------- | -------------------  | ---- | ------------------------------------------ |
95| tokenID   |  number   | 是   | 要校验应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。              |
96| permissionName | Permissions | 是   | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/permissions-for-all.md)中查询。 |
97
98**返回值:**
99
100| 类型          | 说明                                |
101| :------------ | :---------------------------------- |
102| [GrantStatus](#grantstatus) | 枚举实例,返回授权状态。 |
103
104**错误码:**
105
106以下错误码的详细介绍请参见[访问控制错误码](errorcode-access-token.md)。
107
108| 错误码ID | 错误信息 |
109| -------- | -------- |
110| 12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256. |
111
112**示例:**
113
114```ts
115import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
116
117let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
118let tokenID: number = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取
119let data: abilityAccessCtrl.GrantStatus = atManager.verifyAccessTokenSync(tokenID, 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS');
120console.log(`data->${JSON.stringify(data)}`);
121```
122
123### verifyAccessToken<sup>9+</sup>
124
125verifyAccessToken(tokenID: number, permissionName: Permissions): Promise&lt;GrantStatus&gt;
126
127校验应用是否授予权限。使用Promise异步回调。
128
129> **说明:**
130>
131> 建议使用[checkAccessToken](#checkaccesstoken9)替代。
132
133**系统能力:** SystemCapability.Security.AccessToken
134
135**参数:**
136
137| 参数名   | 类型                 | 必填 | 说明                                       |
138| -------- | -------------------  | ---- | ------------------------------------------ |
139| tokenID   |  number   | 是   | 要校验的目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。             |
140| permissionName | Permissions | 是   | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/permissions-for-all.md)中查询。 |
141
142**返回值:**
143
144| 类型          | 说明                                |
145| :------------ | :---------------------------------- |
146| Promise&lt;GrantStatus&gt; | Promise对象。返回授权状态结果。 |
147
148**示例:**
149
150```ts
151import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
152import { BusinessError } from '@ohos.base';
153
154let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
155let tokenID: number = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取
156let permissionName: Permissions = 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS';
157atManager.verifyAccessToken(tokenID, permissionName).then((data: abilityAccessCtrl.GrantStatus) => {
158  console.log(`promise: data->${JSON.stringify(data)}`);
159}).catch((err: BusinessError) => {
160  console.log(`verifyAccessToken fail, err->${JSON.stringify(err)}`);
161});
162```
163
164### requestPermissionsFromUser<sup>9+</sup>
165
166requestPermissionsFromUser(context: Context, permissionList: Array&lt;Permissions&gt;, requestCallback: AsyncCallback&lt;PermissionRequestResult&gt;) : void
167
168用于UIAbility拉起弹框请求用户授权。使用callback异步回调。
169
170如果用户拒绝授权,将无法再次拉起弹框,需要用户在系统应用“设置”的界面中,手动授予权限。
171
172> **说明:**
173>
174> 非UIAbility不支持调用本函数。
175
176**模型约束**:此接口仅可在Stage模型下使用。
177
178**系统能力**: SystemCapability.Security.AccessToken
179
180**参数:**
181
182| 参数名 | 类型 | 必填 | 说明 |
183| -------- | -------- | -------- | -------- |
184| context | Context | 是 | 请求权限的UIAbility的UIAbilityContext。 |
185| permissionList | Array&lt;Permissions&gt; | 是 | 权限名列表,合法的权限名取值可在[应用权限列表](../../security/AccessToken/permissions-for-all.md)中查询。 |
186| requestCallback | AsyncCallback&lt;[PermissionRequestResult](js-apis-permissionrequestresult.md)&gt; | 是 | 回调函数,返回接口调用是否成功的结果。 |
187
188**错误码:**
189
190以下错误码的详细介绍请参见[访问控制错误码](errorcode-access-token.md)。
191
192| 错误码ID | 错误信息 |
193| -------- | -------- |
194| 12100001 | The parameter is invalid. The context is invalid when it does not belong to the application itself. |
195
196**示例:**
197示例中context的获取方式请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
198
199```ts
200import abilityAccessCtrl, { Context, PermissionRequestResult } from '@ohos.abilityAccessCtrl';
201import { BusinessError } from '@ohos.base';
202import common from '@ohos.app.ability.common';
203
204let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
205let context: Context = getContext(this) as common.UIAbilityContext;
206atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA'], (err: BusinessError, data: PermissionRequestResult)=>{
207  if (err) {
208    console.log(`requestPermissionsFromUser fail, err->${JSON.stringify(err)}`);
209  } else {
210    console.info('data:' + JSON.stringify(data));
211    console.info('data permissions:' + data.permissions);
212    console.info('data authResults:' + data.authResults);
213  }
214});
215```
216
217### requestPermissionsFromUser<sup>9+</sup>
218
219requestPermissionsFromUser(context: Context, permissionList: Array&lt;Permissions&gt;) : Promise&lt;PermissionRequestResult&gt;
220
221用于UIAbility拉起弹框请求用户授权。使用promise异步回调。
222
223如果用户拒绝授权,将无法再次拉起弹框,需要用户在系统应用“设置”的界面中,手动授予权限。
224
225> **说明:**
226>
227> 非UIAbility不支持调用本函数。
228
229**模型约束**:此接口仅可在Stage模型下使用。
230
231**系统能力**: SystemCapability.Security.AccessToken
232
233**参数:**
234
235| 参数名 | 类型 | 必填 | 说明 |
236| -------- | -------- | -------- | -------- |
237| context | Context | 是 | 请求权限的UIAbility的UIAbilityContext。 |
238| permissionList | Array&lt;Permissions&gt; | 是 | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/permissions-for-all.md)中查询。 |
239
240**返回值:**
241
242| 类型 | 说明 |
243| -------- | -------- |
244| Promise&lt;[PermissionRequestResult](js-apis-permissionrequestresult.md)&gt; | 返回一个Promise,包含接口的结果。 |
245
246**错误码:**
247
248以下错误码的详细介绍请参见[访问控制错误码](errorcode-access-token.md)。
249
250| 错误码ID | 错误信息 |
251| -------- | -------- |
252| 12100001 | The parameter is invalid. The context is invalid when it does not belong to the application itself. |
253
254**示例:**
255示例中context的获取方式请参见[获取UIAbility的上下文信息](../../application-models/uiability-usage.md#获取uiability的上下文信息)。
256
257```ts
258import abilityAccessCtrl, { Context, PermissionRequestResult } from '@ohos.abilityAccessCtrl';
259import { BusinessError } from '@ohos.base';
260import common from '@ohos.app.ability.common';
261
262let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
263let context: Context = getContext(this) as common.UIAbilityContext;
264atManager.requestPermissionsFromUser(context, ['ohos.permission.CAMERA']).then((data: PermissionRequestResult) => {
265  console.info('data:' + JSON.stringify(data));
266  console.info('data permissions:' + data.permissions);
267  console.info('data authResults:' + data.authResults);
268}).catch((err: BusinessError) => {
269  console.info('data:' + JSON.stringify(err));
270});
271```
272
273### verifyAccessToken<sup>(deprecated)</sup>
274
275verifyAccessToken(tokenID: number, permissionName: string): Promise&lt;GrantStatus&gt;
276
277校验应用是否授予权限。使用Promise异步回调。
278
279> **说明:**
280>
281> 从API version 9开始不再维护,建议使用[checkAccessToken](#checkaccesstoken9)替代。
282
283**系统能力:** SystemCapability.Security.AccessToken
284
285**参数:**
286
287| 参数名   | 类型                 | 必填 | 说明                                       |
288| -------- | -------------------  | ---- | ------------------------------------------ |
289| tokenID   |  number   | 是   | 要校验的目标应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。             |
290| permissionName | string | 是   | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/permissions-for-all.md)中查询。 |
291
292**返回值:**
293
294| 类型          | 说明                                |
295| :------------ | :---------------------------------- |
296| Promise&lt;GrantStatus&gt; | Promise对象。返回授权状态结果。 |
297
298**示例:**
299
300```ts
301import abilityAccessCtrl from '@ohos.abilityAccessCtrl';
302import { BusinessError } from '@ohos.base';
303
304let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
305let tokenID: number = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取
306atManager.verifyAccessToken(tokenID, 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS').then((data: abilityAccessCtrl.GrantStatus) => {
307  console.log(`promise: data->${JSON.stringify(data)}`);
308}).catch((err: BusinessError) => {
309  console.log(`verifyAccessToken fail, err->${JSON.stringify(err)}`);
310});
311```
312
313### checkAccessTokenSync<sup>10+</sup>
314
315checkAccessTokenSync(tokenID: number, permissionName: Permissions): GrantStatus
316
317校验应用是否被授予权限,同步返回结果。
318
319**系统能力:** SystemCapability.Security.AccessToken
320
321**参数:**
322
323| 参数名   | 类型                 | 必填 | 说明                                       |
324| -------- | -------------------  | ---- | ------------------------------------------ |
325| tokenID   |  number   | 是   | 要校验应用的身份标识。可通过应用的[ApplicationInfo](js-apis-bundleManager-applicationInfo.md)获得。              |
326| permissionName | Permissions | 是   | 需要校验的权限名称,合法的权限名取值可在[应用权限列表](../../security/AccessToken/permissions-for-all.md)中查询。 |
327
328**返回值:**
329
330| 类型          | 说明                                |
331| :------------ | :---------------------------------- |
332| [GrantStatus](#grantstatus) | 枚举实例,返回授权状态。 |
333
334**错误码:**
335
336以下错误码的详细介绍请参见[访问控制错误码](errorcode-access-token.md)。
337
338| 错误码ID | 错误信息 |
339| -------- | -------- |
340| 12100001 | The parameter is invalid. The tokenID is 0, or the string size of permissionName is larger than 256. |
341
342**示例:**
343
344```ts
345import abilityAccessCtrl, { Permissions } from '@ohos.abilityAccessCtrl';
346
347let atManager: abilityAccessCtrl.AtManager = abilityAccessCtrl.createAtManager();
348let tokenID: number = 0; // 系统应用可以通过bundleManager.getApplicationInfo获取,普通应用可以通过bundleManager.getBundleInfoForSelf获取
349let permissionName: Permissions = 'ohos.permission.GRANT_SENSITIVE_PERMISSIONS';
350let data: abilityAccessCtrl.GrantStatus = atManager.checkAccessTokenSync(tokenID, permissionName);
351console.log(`data->${JSON.stringify(data)}`);
352```
353
354### GrantStatus
355
356表示授权状态的枚举。
357
358**系统能力:** SystemCapability.Security.AccessToken
359
360| 名称               |    值 | 说明        |
361| ------------------ | ----- | ----------- |
362| PERMISSION_DENIED  | -1    | 表示未授权。 |
363| PERMISSION_GRANTED | 0     | 表示已授权。 |
364