open_lark/service/cloud_docs/drive/v1/permissions.rs
1use reqwest::Method;
2use serde::{Deserialize, Serialize};
3
4use crate::{
5 core::{
6 api_req::ApiRequest,
7 api_resp::{ApiResponseTrait, BaseResponse},
8 config::Config,
9 constants::AccessTokenType,
10 http::Transport,
11 req_option::RequestOption,
12 SDKResult,
13 },
14 impl_executable_builder_owned,
15};
16
17pub struct PermissionsService {
18 config: Config,
19}
20
21impl PermissionsService {
22 pub fn new(config: Config) -> Self {
23 Self { config }
24 }
25
26 /// 获取云文档权限设置
27 pub async fn get(
28 &self,
29 request: GetPermissionRequest,
30 option: Option<RequestOption>,
31 ) -> SDKResult<BaseResponse<GetPermissionResponse>> {
32 let mut api_req = request.api_request;
33 api_req.http_method = Method::GET;
34 api_req.api_path = format!("/open-apis/drive/v2/permissions/{}/public", request.token);
35 api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
36
37 let api_resp = Transport::request(api_req, &self.config, option).await?;
38
39 Ok(api_resp)
40 }
41
42 /// 更新云文档权限设置
43 pub async fn patch(
44 &self,
45 request: PatchPermissionRequest,
46 option: Option<RequestOption>,
47 ) -> SDKResult<BaseResponse<GetPermissionResponse>> {
48 let mut api_req = request.api_request;
49 api_req.http_method = Method::PATCH;
50 api_req.api_path = format!("/open-apis/drive/v2/permissions/{}/public", request.token);
51 api_req.supported_access_token_types = vec![AccessTokenType::Tenant, AccessTokenType::User];
52
53 let api_resp = Transport::request(api_req, &self.config, option).await?;
54
55 Ok(api_resp)
56 }
57}
58
59/// 获取云文档权限设置
60#[derive(Debug, Default)]
61pub struct GetPermissionRequest {
62 api_request: ApiRequest,
63 /// 文件的 token
64 token: String,
65 /// 文件类型,需要与文件的 token 相匹配
66 ///
67 /// 示例值:"doc"
68 ///
69 /// 可选值有:
70 ///
71 /// - doc:旧版文档
72 /// - sheet:电子表格
73 /// - file:云空间文件
74 /// - wiki:知识库节点
75 /// - bitable:多维表格
76 /// - docx:新版文档
77 /// - mindnote:思维笔记
78 /// - minutes:妙记
79 /// - slides:幻灯片
80 r#type: String,
81}
82
83impl GetPermissionRequest {
84 pub fn builder() -> GetPermissionRequestBuilder {
85 GetPermissionRequestBuilder::default()
86 }
87}
88
89#[derive(Default)]
90pub struct GetPermissionRequestBuilder {
91 request: GetPermissionRequest,
92}
93
94impl GetPermissionRequestBuilder {
95 /// 文件的 token
96 pub fn token(mut self, token: impl ToString) -> Self {
97 self.request.token = token.to_string();
98 self
99 }
100
101 /// 文件类型,需要与文件的 token 相匹配
102 ///
103 /// 示例值:"doc"
104 ///
105 /// 可选值有:
106 ///
107 /// - doc:旧版文档
108 /// - sheet:电子表格
109 /// - file:云空间文件
110 /// - wiki:知识库节点
111 /// - bitable:多维表格
112 /// - docx:新版文档
113 /// - mindnote:思维笔记
114 /// - minutes:妙记
115 /// - slides:幻灯片
116 pub fn r#type(mut self, r#type: impl ToString) -> Self {
117 self.request.r#type = r#type.to_string();
118 self.request
119 .api_request
120 .query_params
121 .insert("type".to_string(), r#type.to_string());
122 self
123 }
124
125 pub fn build(self) -> GetPermissionRequest {
126 self.request
127 }
128}
129
130/// 返回的文档公共设置
131#[derive(Debug, Deserialize)]
132pub struct GetPermissionResponse {
133 /// 返回的文档公共设置
134 pub permission_public: PermissionPublic,
135}
136
137impl ApiResponseTrait for GetPermissionResponse {
138 fn data_format() -> crate::core::api_resp::ResponseFormat {
139 crate::core::api_resp::ResponseFormat::Data
140 }
141}
142
143#[derive(Debug, Deserialize)]
144/// 返回的文档公共设置
145pub struct PermissionPublic {
146 /// 允许内容被分享到组织外
147 ///
148 /// 可选值有:
149 ///
150 /// - open:打开
151 /// - closed:关闭
152 /// - allow_share_partner_tenant:允许分享给关联组织
153 pub external_access_entity: Option<String>,
154 /// 谁可以创建副本、打印、下载
155 ///
156 /// 可选值有:
157 ///
158 /// - anyone_can_view:拥有可阅读权限的用户
159 /// - anyone_can_edit:拥有可编辑权限的用户
160 /// - only_full_access:拥有可管理权限(包括我)的用户
161 pub security_entity: Option<String>,
162 /// 谁可以评论
163 ///
164 /// 可选值有:
165 ///
166 /// - anyone_can_view:拥有可阅读权限的用户
167 /// - anyone_can_edit:拥有可编辑权限的用户
168 pub comment_entity: Option<String>,
169 /// 谁可以添加和管理协作者-组织维度
170 ///
171 /// 可选值有:
172 ///
173 /// - anyone:所有可阅读或编辑此文档的用户
174 /// - same_tenant:组织内所有可阅读或编辑此文档的用户
175 pub share_entity: Option<String>,
176 /// 谁可以添加和管理协作者-协作者维度
177 ///
178 /// 可选值有:
179 ///
180 /// - collaborator_can_view:拥有可阅读权限的协作者
181 /// - collaborator_can_edit:拥有可编辑权限的协作者
182 /// - collaborator_full_access:拥有可管理权限(包括我)的协作者
183 pub manage_collaborator_entity: Option<String>,
184 /// 链接分享设置
185 ///
186 /// 可选值有:
187 ///
188 /// - tenant_readable:组织内获得链接的人可阅读
189 /// - tenant_editable:组织内获得链接的人可编辑
190 /// - partner_tenant_readable:关联组织的人可阅读
191 /// - partner_tenant_editable:关联组织的人可编辑
192 /// - anyone_readable:互联网上获得链接的任何人可阅读(仅external_access=“open”时有效)
193 /// - anyone_editable:互联网上获得链接的任何人可编辑(仅external_access=“open”时有效)
194 /// - closed:关闭链接分享
195 pub link_share_entity: Option<String>,
196 /// 谁可以复制内容
197 ///
198 /// 可选值有:
199 ///
200 /// - anyone_can_view:拥有可阅读权限的用户
201 /// - anyone_can_edit:拥有可编辑权限的用户
202 /// - only_full_access:拥有可管理权限(包括我)的协作者
203 pub copy_entity: Option<String>,
204 /// 节点是否已加锁,加锁之后不再继承父级页面的权限
205 pub lock_switch: Option<bool>,
206}
207
208#[derive(Debug, Default, Serialize)]
209pub struct PatchPermissionRequest {
210 #[serde(skip)]
211 api_request: ApiRequest,
212 /// 文件的 token
213 #[serde(skip)]
214 token: String,
215 /// 允许内容被分享到组织外
216 ///
217 /// 示例值:"open"
218 ///
219 /// 可选值有:
220 ///
221 /// - open:打开
222 /// - closed:关闭
223 /// - allow_share_partner_tenant:允许分享给关联组织(只有租户后台设置仅允许关联组织分享,
224 /// 才能设置为该值)
225 #[serde(skip_serializing_if = "Option::is_none")]
226 external_access_entity: Option<String>,
227 /// 谁可以创建副本、打印、下载
228 ///
229 /// 示例值:"anyone_can_view"
230 ///
231 /// 可选值有:
232 ///
233 /// - anyone_can_view:拥有可阅读权限的用户
234 /// - anyone_can_edit:拥有可编辑权限的用户
235 /// - only_full_access:拥有可管理权限(包括我)的用户
236 #[serde(skip_serializing_if = "Option::is_none")]
237 security_entity: Option<String>,
238 /// 谁可以评论
239 ///
240 /// 示例值:"anyone_can_view"
241 ///
242 /// 可选值有:
243 ///
244 /// - anyone_can_view:拥有可阅读权限的用户
245 /// - anyone_can_edit:拥有可编辑权限的用户
246 #[serde(skip_serializing_if = "Option::is_none")]
247 comment_entity: Option<String>,
248 /// 谁可以添加和管理协作者-组织维度
249 ///
250 /// 示例值:"anyone"
251 ///
252 /// 可选值有:
253 ///
254 /// - anyone:所有可阅读或编辑此文档的用户
255 /// - same_tenant:组织内所有可阅读或编辑此文档的用户
256 #[serde(skip_serializing_if = "Option::is_none")]
257 share_entity: Option<String>,
258 /// 谁可以添加和管理协作者-协作者维度
259 ///
260 /// 示例值:"collaborator_can_view"
261 ///
262 /// 可选值有:
263 ///
264 /// - collaborator_can_view:拥有可阅读权限的协作者
265 /// - collaborator_can_edit:拥有可编辑权限的协作者
266 /// - collaborator_full_access:拥有可管理权限(包括我)的协作者
267 #[serde(skip_serializing_if = "Option::is_none")]
268 manage_collaborator_entity: Option<String>,
269 /// 链接分享设置
270 ///
271 /// 示例值:"tenant_readable"
272 ///
273 /// 可选值有:
274 ///
275 /// tenant_readable:组织内获得链接的人可阅读
276 /// tenant_editable:组织内获得链接的人可编辑
277 /// partner_tenant_readable:关联组织的人可阅读(只有租户后台设置仅允许关联组织分享,
278 /// 才能设置为该值) partner_tenant_editable:
279 /// 关联组织的人可编辑(只有租户后台设置仅允许关联组织分享,才能设置为该值)
280 /// anyone_readable:互联网上获得链接的任何人可阅读(仅external_access_entity=“open”时有效)
281 /// anyone_editable:互联网上获得链接的任何人可编辑(仅external_access_entity=“open”时有效)
282 /// closed:关闭链接分享
283 #[serde(skip_serializing_if = "Option::is_none")]
284 link_share_entity: Option<String>,
285 #[serde(skip_serializing_if = "Option::is_none")]
286 copy_entity: Option<String>,
287}
288
289impl PatchPermissionRequest {
290 pub fn builder() -> PatchPermissionRequestBuilder {
291 PatchPermissionRequestBuilder::default()
292 }
293}
294
295#[derive(Default)]
296pub struct PatchPermissionRequestBuilder {
297 request: PatchPermissionRequest,
298}
299
300impl PatchPermissionRequestBuilder {
301 /// 文件的 token
302 pub fn token(mut self, token: impl ToString) -> Self {
303 self.request.token = token.to_string();
304 self
305 }
306
307 /// 文件类型,需要与文件的 token 相匹配
308 ///
309 /// 示例值:"doc"
310 ///
311 /// 可选值有:
312 ///
313 /// - doc:旧版文档
314 /// - sheet:电子表格
315 /// - file:云空间文件
316 /// - wiki:知识库节点
317 /// - bitable:多维表格
318 /// - docx:新版文档
319 /// - mindnote:思维笔记
320 /// - minutes:妙记
321 /// - slides:幻灯片
322 pub fn r#type(mut self, r#type: impl ToString) -> Self {
323 self.request
324 .api_request
325 .query_params
326 .insert("type".to_string(), r#type.to_string());
327 self
328 }
329
330 /// 允许内容被分享到组织外
331 ///
332 /// 示例值:"open"
333 ///
334 /// 可选值有:
335 ///
336 /// - open:打开
337 /// - closed:关闭
338 /// - allow_share_partner_tenant:允许分享给关联组织(只有租户后台设置仅允许关联组织分享,
339 /// 才能设置为该值)
340 pub fn external_access_entity(mut self, external_access_entity: impl ToString) -> Self {
341 self.request.external_access_entity = Some(external_access_entity.to_string());
342 self
343 }
344
345 /// 谁可以创建副本、打印、下载
346 ///
347 /// 示例值:"anyone_can_view"
348 ///
349 /// 可选值有:
350 ///
351 /// - anyone_can_view:拥有可阅读权限的用户
352 /// - anyone_can_edit:拥有可编辑权限的用户
353 /// - only_full_access:拥有可管理权限(包括我)的用户
354 pub fn security_entity(mut self, security_entity: impl ToString) -> Self {
355 self.request.security_entity = Some(security_entity.to_string());
356 self
357 }
358
359 /// 谁可以评论
360 ///
361 /// 示例值:"anyone_can_view"
362 ///
363 /// 可选值有:
364 ///
365 /// - anyone_can_view:拥有可阅读权限的用户
366 /// - anyone_can_edit:拥有可编辑权限的用户
367 pub fn comment_entity(mut self, comment_entity: impl ToString) -> Self {
368 self.request.comment_entity = Some(comment_entity.to_string());
369 self
370 }
371
372 /// 谁可以添加和管理协作者-组织维度
373 ///
374 /// 示例值:"anyone"
375 ///
376 /// 可选值有:
377 ///
378 /// - anyone:所有可阅读或编辑此文档的用户
379 /// - same_tenant:组织内所有可阅读或编辑此文档的用户
380 pub fn share_entity(mut self, share_entity: impl ToString) -> Self {
381 self.request.share_entity = Some(share_entity.to_string());
382 self
383 }
384
385 /// 谁可以添加和管理协作者-协作者维度
386 ///
387 /// 示例值:"collaborator_can_view"
388 ///
389 /// 可选值有:
390 ///
391 /// - collaborator_can_view:拥有可阅读权限的协作者
392 /// - collaborator_can_edit:拥有可编辑权限的协作者
393 /// - collaborator_full_access:拥有可管理权限(包括我)的协作者
394 pub fn manage_collaborator_entity(mut self, manage_collaborator_entity: impl ToString) -> Self {
395 self.request.manage_collaborator_entity = Some(manage_collaborator_entity.to_string());
396 self
397 }
398
399 /// 链接分享设置
400 ///
401 /// 示例值:"tenant_readable"
402 ///
403 /// 可选值有:
404 ///
405 /// tenant_readable:组织内获得链接的人可阅读
406 /// tenant_editable:组织内获得链接的人可编辑
407 /// partner_tenant_readable:关联组织的人可阅读(只有租户后台设置仅允许关联组织分享,
408 /// 才能设置为该值) partner_tenant_editable:
409 /// 关联组织的人可编辑(只有租户后台设置仅允许关联组织分享,才能设置为该值)
410 /// anyone_readable:互联网上获得链接的任何人可阅读(仅external_access_entity=“open”时有效)
411 /// anyone_editable:互联网上获得链接的任何人可编辑(仅external_access_entity=“open”时有效)
412 /// closed:关闭链接分享
413 pub fn link_share_entity(mut self, link_share_entity: impl ToString) -> Self {
414 self.request.link_share_entity = Some(link_share_entity.to_string());
415 self
416 }
417
418 /// 谁可以复制内容
419 ///
420 /// 可选值有:
421 ///
422 /// - anyone_can_view:拥有可阅读权限的用户
423 /// - anyone_can_edit:拥有可编辑权限的用户
424 /// - only_full_access:拥有可管理权限(包括我)的协作者
425 pub fn copy_entity(mut self, copy_entity: impl ToString) -> Self {
426 self.request.copy_entity = Some(copy_entity.to_string());
427 self
428 }
429
430 pub fn build(mut self) -> PatchPermissionRequest {
431 self.request.api_request.body = serde_json::to_vec(&self.request).unwrap();
432 self.request
433 }
434}
435
436impl_executable_builder_owned!(
437 GetPermissionRequestBuilder,
438 PermissionsService,
439 GetPermissionRequest,
440 BaseResponse<GetPermissionResponse>,
441 get
442);
443
444impl_executable_builder_owned!(
445 PatchPermissionRequestBuilder,
446 PermissionsService,
447 PatchPermissionRequest,
448 BaseResponse<GetPermissionResponse>,
449 patch
450);