1e41f4b71Sopenharmony_ci# @ohos.application.uriPermissionManager(URI权限管理)(系统接口)
2e41f4b71Sopenharmony_ci
3e41f4b71Sopenharmony_ciURI权限管理模块。用于应用A授权/撤销授权URI给应用B
4e41f4b71Sopenharmony_ci
5e41f4b71Sopenharmony_ci> **说明:**
6e41f4b71Sopenharmony_ci> 
7e41f4b71Sopenharmony_ci> 本模块首批接口从API version 10 开始支持。后续版本的新增接口,采用上角标单独标记接口的起始版本。  
8e41f4b71Sopenharmony_ci> 本模块接口均为系统接口,三方应用不支持调用。
9e41f4b71Sopenharmony_ci
10e41f4b71Sopenharmony_ci
11e41f4b71Sopenharmony_ci## 导入模块
12e41f4b71Sopenharmony_ci
13e41f4b71Sopenharmony_ci  
14e41f4b71Sopenharmony_ci```ts
15e41f4b71Sopenharmony_ciimport { uriPermissionManager } from '@kit.AbilityKit';
16e41f4b71Sopenharmony_ci```
17e41f4b71Sopenharmony_ci
18e41f4b71Sopenharmony_ci
19e41f4b71Sopenharmony_ci## uriPermissionManager.grantUriPermission
20e41f4b71Sopenharmony_ci
21e41f4b71Sopenharmony_cigrantUriPermission(uri: string, flag: wantConstant.Flags, targetBundleName: string, callback: AsyncCallback<number>): void
22e41f4b71Sopenharmony_ci
23e41f4b71Sopenharmony_ci授权URI给指定应用。使用callback异步回调。
24e41f4b71Sopenharmony_ci
25e41f4b71Sopenharmony_ci允许应用授权属于自身的URI, 若应用拥有ohos.permission.PROXY_AUTHORIZATION_URI权限, 则还允许授权不属于自身但具有访问权限的URI。
26e41f4b71Sopenharmony_ci**系统API**:该接口为系统接口,三方应用不支持调用。
27e41f4b71Sopenharmony_ci
28e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
29e41f4b71Sopenharmony_ci
30e41f4b71Sopenharmony_ci**需要权限:** ohos.permission.PROXY_AUTHORIZATION_URI
31e41f4b71Sopenharmony_ci
32e41f4b71Sopenharmony_ci**参数:**
33e41f4b71Sopenharmony_ci
34e41f4b71Sopenharmony_ci  | 参数名 | 类型 | 必填 | 说明 | 
35e41f4b71Sopenharmony_ci  | -------- | -------- | -------- | -------- |
36e41f4b71Sopenharmony_ci  | uri | string | 是 | 指向文件的URI,例如fileshare:///com.samples.filesharetest.FileShare/person/10。 | 
37e41f4b71Sopenharmony_ci  | flag | [wantConstant.Flags](js-apis-app-ability-wantConstant.md#flags) | 是 | URI的读权限或写权限。 | 
38e41f4b71Sopenharmony_ci  | targetBundleName | string | 是 | 被授权URI的应用包名 | 
39e41f4b71Sopenharmony_ci  | callback | AsyncCallback<number> | 是 | 回调函数。返回0表示有权限,返回-1表示无权限。 | 
40e41f4b71Sopenharmony_ci
41e41f4b71Sopenharmony_ci**错误码:**
42e41f4b71Sopenharmony_ci
43e41f4b71Sopenharmony_ci  以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
44e41f4b71Sopenharmony_ci
45e41f4b71Sopenharmony_ci| 错误码ID | 错误信息 |
46e41f4b71Sopenharmony_ci| ------- | -------------------------------- |
47e41f4b71Sopenharmony_ci| 201 | Permission denied. |
48e41f4b71Sopenharmony_ci| 202 | Not System App. Interface caller is not a system app. |
49e41f4b71Sopenharmony_ci| 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
50e41f4b71Sopenharmony_ci| 16000050 | Internal error. |
51e41f4b71Sopenharmony_ci| 16000058 | Invalid URI flag. |
52e41f4b71Sopenharmony_ci| 16000059 | Invalid URI type. |
53e41f4b71Sopenharmony_ci| 16000060 | A sandbox application cannot grant URI permission. |
54e41f4b71Sopenharmony_ci
55e41f4b71Sopenharmony_ci
56e41f4b71Sopenharmony_ci**示例:**
57e41f4b71Sopenharmony_ci    
58e41f4b71Sopenharmony_ci  ```ts
59e41f4b71Sopenharmony_ci  import { uriPermissionManager, wantConstant } from '@kit.AbilityKit';
60e41f4b71Sopenharmony_ci  import { fileIo, fileUri } from '@kit.CoreFileKit';
61e41f4b71Sopenharmony_ci
62e41f4b71Sopenharmony_ci  let targetBundleName = 'com.example.test_case1'
63e41f4b71Sopenharmony_ci  let path = "file://com.example.test_case1/data/storage/el2/base/haps/entry_test/files/newDir";
64e41f4b71Sopenharmony_ci  fileIo.mkdir(path, (err) => {
65e41f4b71Sopenharmony_ci    if (err) {
66e41f4b71Sopenharmony_ci      console.log("mkdir error" + err.message);
67e41f4b71Sopenharmony_ci    } else {
68e41f4b71Sopenharmony_ci      console.log("mkdir succeed");
69e41f4b71Sopenharmony_ci    }
70e41f4b71Sopenharmony_ci  });
71e41f4b71Sopenharmony_ci  let uri = fileUri.getUriFromPath(path);
72e41f4b71Sopenharmony_ci  uriPermissionManager.grantUriPermission(uri, wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION, targetBundleName, (result) => {
73e41f4b71Sopenharmony_ci    console.log("result.code = " + result.code);
74e41f4b71Sopenharmony_ci  });
75e41f4b71Sopenharmony_ci  ```
76e41f4b71Sopenharmony_ci
77e41f4b71Sopenharmony_ci
78e41f4b71Sopenharmony_ci## uriPermissionManager.grantUriPermission
79e41f4b71Sopenharmony_ci
80e41f4b71Sopenharmony_cigrantUriPermission(uri: string, flag: wantConstant.Flags, targetBundleName: string): Promise<number>
81e41f4b71Sopenharmony_ci
82e41f4b71Sopenharmony_ci授权URI给指定应用。使用Promise异步回调。
83e41f4b71Sopenharmony_ci
84e41f4b71Sopenharmony_ci允许应用授权属于自身的URI, 若应用拥有ohos.permission.PROXY_AUTHORIZATION_URI权限, 则还允许授权不属于自身但具有访问权限的URI。
85e41f4b71Sopenharmony_ci**系统API**:该接口为系统接口,三方应用不支持调用。
86e41f4b71Sopenharmony_ci
87e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
88e41f4b71Sopenharmony_ci
89e41f4b71Sopenharmony_ci**需要权限:** ohos.permission.PROXY_AUTHORIZATION_URI
90e41f4b71Sopenharmony_ci
91e41f4b71Sopenharmony_ci**参数:**
92e41f4b71Sopenharmony_ci
93e41f4b71Sopenharmony_ci  | 参数名 | 类型 | 必填 | 说明 | 
94e41f4b71Sopenharmony_ci  | -------- | -------- | -------- | -------- |
95e41f4b71Sopenharmony_ci  | uri | string | 是 | 指向文件的URI,例如fileshare:///com.samples.filesharetest.FileShare/person/10。 | 
96e41f4b71Sopenharmony_ci  | flag | [wantConstant.Flags](js-apis-app-ability-wantConstant.md#flags) | 是 | URI的读权限或写权限。 | 
97e41f4b71Sopenharmony_ci  | targetBundleName | string | 是 | 被授权URI的应用包名 |  
98e41f4b71Sopenharmony_ci
99e41f4b71Sopenharmony_ci**返回值:**
100e41f4b71Sopenharmony_ci
101e41f4b71Sopenharmony_ci  | 类型 | 说明 | 
102e41f4b71Sopenharmony_ci  | -------- | -------- |
103e41f4b71Sopenharmony_ci  | Promise<number> | Promise对象。返回0表示有权限,返回-1表示无权限。 | 
104e41f4b71Sopenharmony_ci
105e41f4b71Sopenharmony_ci**错误码:**
106e41f4b71Sopenharmony_ci
107e41f4b71Sopenharmony_ci  以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
108e41f4b71Sopenharmony_ci
109e41f4b71Sopenharmony_ci  | 错误码ID | 错误信息 |
110e41f4b71Sopenharmony_ci  | ------- | -------------------------------- |
111e41f4b71Sopenharmony_ci  | 201 | Permission denied. |
112e41f4b71Sopenharmony_ci  | 202 | Not System App. Interface caller is not a system app. |
113e41f4b71Sopenharmony_ci  | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
114e41f4b71Sopenharmony_ci  | 16000050 | Internal error. |
115e41f4b71Sopenharmony_ci  | 16000058 | Invalid URI flag. |
116e41f4b71Sopenharmony_ci  | 16000059 | Invalid URI type. |
117e41f4b71Sopenharmony_ci  | 16000060 | A sandbox application cannot grant URI permission. |
118e41f4b71Sopenharmony_ci
119e41f4b71Sopenharmony_ci**示例:**
120e41f4b71Sopenharmony_ci    
121e41f4b71Sopenharmony_ci  ```ts
122e41f4b71Sopenharmony_ci  import { uriPermissionManager, wantConstant } from '@kit.AbilityKit';
123e41f4b71Sopenharmony_ci  import { fileIo, fileUri } from '@kit.CoreFileKit';
124e41f4b71Sopenharmony_ci  import { BusinessError } from '@kit.BasicServicesKit';
125e41f4b71Sopenharmony_ci
126e41f4b71Sopenharmony_ci  let targetBundleName = 'com.example.test_case1'
127e41f4b71Sopenharmony_ci  let path = "file://com.example.test_case1/data/storage/el2/base/haps/entry_test/files/newDir";
128e41f4b71Sopenharmony_ci
129e41f4b71Sopenharmony_ci  fileIo.mkdir(path, (err) => {
130e41f4b71Sopenharmony_ci    if (err) {
131e41f4b71Sopenharmony_ci      console.log("mkdir error" + err.message);
132e41f4b71Sopenharmony_ci    } else {
133e41f4b71Sopenharmony_ci      console.log("mkdir succeed");
134e41f4b71Sopenharmony_ci    }
135e41f4b71Sopenharmony_ci  });
136e41f4b71Sopenharmony_ci  let uri = fileUri.getUriFromPath(path);
137e41f4b71Sopenharmony_ci  uriPermissionManager.grantUriPermission(uri, wantConstant.Flags.FLAG_AUTH_READ_URI_PERMISSION, targetBundleName)
138e41f4b71Sopenharmony_ci    .then((data) => {
139e41f4b71Sopenharmony_ci      console.log('Verification succeeded.' + data);
140e41f4b71Sopenharmony_ci    }).catch((error: BusinessError) => {
141e41f4b71Sopenharmony_ci    console.log('Verification failed.');
142e41f4b71Sopenharmony_ci  });
143e41f4b71Sopenharmony_ci  ```
144e41f4b71Sopenharmony_ci
145e41f4b71Sopenharmony_ci## uriPermissionManager.revokeUriPermission
146e41f4b71Sopenharmony_ci
147e41f4b71Sopenharmony_cirevokeUriPermission(uri: string, targetBundleName: string, callback: AsyncCallback<number>): void
148e41f4b71Sopenharmony_ci
149e41f4b71Sopenharmony_ci撤销授权指定应用的URI。使用callback异步回调。
150e41f4b71Sopenharmony_ci
151e41f4b71Sopenharmony_ci允许应用撤销自身获得的其他应用URI权限,或授权给其他应用的URI权限。
152e41f4b71Sopenharmony_ci**系统API**:该接口为系统接口,三方应用不支持调用。
153e41f4b71Sopenharmony_ci
154e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
155e41f4b71Sopenharmony_ci
156e41f4b71Sopenharmony_ci**参数:**
157e41f4b71Sopenharmony_ci
158e41f4b71Sopenharmony_ci  | 参数名 | 类型 | 必填 | 说明 | 
159e41f4b71Sopenharmony_ci  | -------- | -------- | -------- | -------- |
160e41f4b71Sopenharmony_ci  | uri | string | 是 | 指向文件的URI,例如fileshare:///com.samples.filesharetest.FileShare/person/10。 | 
161e41f4b71Sopenharmony_ci  | targetBundleName | string | 是 | 被撤销授权uri的应用包名 | 
162e41f4b71Sopenharmony_ci  | callback | AsyncCallback<number> | 是 | 回调函数。返回0表示有权限,返回-1表示无权限。 | 
163e41f4b71Sopenharmony_ci
164e41f4b71Sopenharmony_ci**错误码:**
165e41f4b71Sopenharmony_ci
166e41f4b71Sopenharmony_ci  以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
167e41f4b71Sopenharmony_ci
168e41f4b71Sopenharmony_ci  | 错误码ID | 错误信息 |
169e41f4b71Sopenharmony_ci  | ------- | -------------------------------- |
170e41f4b71Sopenharmony_ci  | 202 | Not System App. Interface caller is not a system app. |
171e41f4b71Sopenharmony_ci  | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
172e41f4b71Sopenharmony_ci  | 16000050 | Internal error. |
173e41f4b71Sopenharmony_ci  | 16000059 | Invalid URI type. |
174e41f4b71Sopenharmony_ci
175e41f4b71Sopenharmony_ci**示例:**
176e41f4b71Sopenharmony_ci    
177e41f4b71Sopenharmony_ci  ```ts
178e41f4b71Sopenharmony_ci  import { uriPermissionManager } from '@kit.AbilityKit';
179e41f4b71Sopenharmony_ci
180e41f4b71Sopenharmony_ci  let targetBundleName = 'com.example.test_case2';
181e41f4b71Sopenharmony_ci  let uri = "file://com.example.test_case1/data/storage/el2/base/haps/entry_test/files/newDir";
182e41f4b71Sopenharmony_ci
183e41f4b71Sopenharmony_ci  uriPermissionManager.revokeUriPermission(uri, targetBundleName, (result) => {
184e41f4b71Sopenharmony_ci    console.log("result.code = " + result.code);
185e41f4b71Sopenharmony_ci  });
186e41f4b71Sopenharmony_ci  ```
187e41f4b71Sopenharmony_ci
188e41f4b71Sopenharmony_ci
189e41f4b71Sopenharmony_ci## uriPermissionManager.revokeUriPermission
190e41f4b71Sopenharmony_ci
191e41f4b71Sopenharmony_cirevokeUriPermission(uri: string, targetBundleName: string): Promise<number>
192e41f4b71Sopenharmony_ci
193e41f4b71Sopenharmony_ci撤销授权指定应用的URI。使用Promise异步回调。
194e41f4b71Sopenharmony_ci
195e41f4b71Sopenharmony_ci
196e41f4b71Sopenharmony_ci允许应用撤销自身获得的其他应用URI权限,或授权给其他应用的URI权限。
197e41f4b71Sopenharmony_ci**系统API**:该接口为系统接口,三方应用不支持调用。
198e41f4b71Sopenharmony_ci
199e41f4b71Sopenharmony_ci**系统能力**:SystemCapability.Ability.AbilityRuntime.Core
200e41f4b71Sopenharmony_ci
201e41f4b71Sopenharmony_ci**参数:**
202e41f4b71Sopenharmony_ci
203e41f4b71Sopenharmony_ci  | 参数名 | 类型 | 必填 | 说明 | 
204e41f4b71Sopenharmony_ci  | -------- | -------- | -------- | -------- |
205e41f4b71Sopenharmony_ci  | uri | string | 是 | 指向文件的URI,例如fileshare:///com.samples.filesharetest.FileShare/person/10。 | 
206e41f4b71Sopenharmony_ci  | targetBundleName | string | 是 | 被授权URI的应用包名 |  
207e41f4b71Sopenharmony_ci
208e41f4b71Sopenharmony_ci**返回值:**
209e41f4b71Sopenharmony_ci
210e41f4b71Sopenharmony_ci  | 类型 | 说明 | 
211e41f4b71Sopenharmony_ci  | -------- | -------- |
212e41f4b71Sopenharmony_ci  | Promise<number> | Promise对象。返回0表示有权限,返回-1表示无权限。 | 
213e41f4b71Sopenharmony_ci
214e41f4b71Sopenharmony_ci**错误码:**
215e41f4b71Sopenharmony_ci
216e41f4b71Sopenharmony_ci  以下错误码详细介绍请参考[通用错误码](../errorcode-universal.md)和[元能力子系统错误码](errorcode-ability.md)。
217e41f4b71Sopenharmony_ci
218e41f4b71Sopenharmony_ci  | 错误码ID | 错误信息 |
219e41f4b71Sopenharmony_ci  | ------- | -------------------------------- |
220e41f4b71Sopenharmony_ci  | 202 | Not System App. Interface caller is not a system app. |
221e41f4b71Sopenharmony_ci  | 401 | Parameter error. Possible causes: 1. Mandatory parameters are left unspecified; 2. Incorrect parameter types.|
222e41f4b71Sopenharmony_ci  | 16000050 | Internal error. |
223e41f4b71Sopenharmony_ci  | 16000059 | Invalid URI type. |
224e41f4b71Sopenharmony_ci
225e41f4b71Sopenharmony_ci
226e41f4b71Sopenharmony_ci**示例:**
227e41f4b71Sopenharmony_ci    
228e41f4b71Sopenharmony_ci  ```ts
229e41f4b71Sopenharmony_ci  import { uriPermissionManager } from '@kit.AbilityKit';
230e41f4b71Sopenharmony_ci  import { BusinessError } from '@kit.BasicServicesKit';
231e41f4b71Sopenharmony_ci
232e41f4b71Sopenharmony_ci  let targetBundleName = 'com.example.test_case2';
233e41f4b71Sopenharmony_ci  let uri = "file://com.example.test_case1/data/storage/el2/base/haps/entry_test/files/newDir";
234e41f4b71Sopenharmony_ci
235e41f4b71Sopenharmony_ci  uriPermissionManager.revokeUriPermission(uri, targetBundleName)
236e41f4b71Sopenharmony_ci    .then((data) => {
237e41f4b71Sopenharmony_ci      console.log('Verification succeeded.' + data);
238e41f4b71Sopenharmony_ci    }).catch((error: BusinessError) => {
239e41f4b71Sopenharmony_ci    console.log('Verification failed.');
240e41f4b71Sopenharmony_ci  });
241e41f4b71Sopenharmony_ci  ```
242