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);