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