From 7e0ef2c9656dddb6a4c8fc9cfd116f7be7644bd6 Mon Sep 17 00:00:00 2001 From: zhaoyunxing Date: Sun, 5 Dec 2021 22:13:47 +0800 Subject: [PATCH] =?UTF-8?q?add:=E8=8E=B7=E5=8F=96=E6=9D=83=E9=99=90?= =?UTF-8?q?=E5=88=97=E8=A1=A8=20(#44)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * add:获取权限列表 * 补充测试 * add:添加权限 --- api_drive_spaces.go | 8 ++ constant/member/member.go | 34 ++++++ constant/role/role.go | 36 ++++++ readme.md | 3 + request/add_drive_spaces_files_permissions.go | 109 ++++++++++++++++++ ...add_drive_spaces_files_permissions_test.go | 51 ++++++++ 6 files changed, 241 insertions(+) create mode 100644 constant/member/member.go create mode 100644 constant/role/role.go create mode 100644 request/add_drive_spaces_files_permissions.go create mode 100644 request/add_drive_spaces_files_permissions_test.go diff --git a/api_drive_spaces.go b/api_drive_spaces.go index 41a579b..cee6977 100644 --- a/api_drive_spaces.go +++ b/api_drive_spaces.go @@ -187,3 +187,11 @@ func (ding *dingTalk) GetDriveSpacesFilesPermissions(spaceId, fileId, unionId st return rsp, ding.Request(http.MethodGet, fmt.Sprintf(constant.GetDriveSpacesFilesPermissionsKey, spaceId, fileId), query, nil, &rsp) } + +//AddDriveSpacesFilesPermissions 添加权限 +func (ding *dingTalk) AddDriveSpacesFilesPermissions(res *request.AddDriveSpacesFilesPermissions) (rsp response.DriveSpacesFilesPermissions, + err error) { + + return rsp, ding.Request(http.MethodPost, fmt.Sprintf(constant.AddDriveSpacesFilesPermissionsKey, res.SpaceId, res.FileId), + nil, res, &rsp) +} diff --git a/constant/member/member.go b/constant/member/member.go new file mode 100644 index 0000000..33a0e17 --- /dev/null +++ b/constant/member/member.go @@ -0,0 +1,34 @@ +/* + * Copyright 2020 zhaoyunxing. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package member + +//Type 成员类型 +type Type string + +const ( + //Org 企业 + Org = Type("org") + + //Department 部门 + Department = Type("department") + + //Conversation 群 + Conversation = Type("conversation") + + //User 用户 + User = Type("user") +) diff --git a/constant/role/role.go b/constant/role/role.go new file mode 100644 index 0000000..4d3b67c --- /dev/null +++ b/constant/role/role.go @@ -0,0 +1,36 @@ +/* + * Copyright 2020 zhaoyunxing. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package role + +type SpacesRole string + +const ( + //Owner 所有者 + Owner = SpacesRole("owner") + + //Admin 管理员 + Admin = SpacesRole("admin") + + //Editor 可编辑 + Editor = SpacesRole("editor") + + //Viewer 可查看/下载 + Viewer = SpacesRole("viewer") + + //OnlyViewer 只读 + OnlyViewer = SpacesRole("only_viewer") +) diff --git a/readme.md b/readme.md index da558b7..0e59339 100644 --- a/readme.md +++ b/readme.md @@ -212,6 +212,9 @@ imports-formatter - [x] [删除文件(夹)](https://developers.dingtalk.com/document/app/delete-objects) `client.DeleteDriveSpacesFiles` - [x] [移动文件(夹)](https://developers.dingtalk.com/document/app/move-a-file) `client.MoveDriveSpacesFiles` - [x] [修改文件(夹)名](https://developers.dingtalk.com/document/app/rename-a-file) `client.RenameDriveSpacesFiles` + - 权限管理 + - [x] [获取权限列表](https://developers.dingtalk.com/document/app/obtain-a-permission-list) `client.GetDriveSpacesFilesPermissions` + - [x] [添加权限](https://developers.dingtalk.com/document/app/add-permissions) `client.AddDriveSpacesFilesPermissions` * 应用管理 (**3**/4) - [x] [获取应用列表](https://ding-doc.dingtalk.com/document#/org-dev-guide/queries-applications) diff --git a/request/add_drive_spaces_files_permissions.go b/request/add_drive_spaces_files_permissions.go new file mode 100644 index 0000000..15cd6d2 --- /dev/null +++ b/request/add_drive_spaces_files_permissions.go @@ -0,0 +1,109 @@ +/* + * Copyright 2020 zhaoyunxing. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package request + +import ( + "github.com/zhaoyunxing92/dingtalk/v2/constant/member" + "github.com/zhaoyunxing92/dingtalk/v2/constant/role" +) + +type AddDriveSpacesFilesPermissions struct { + //钉盘空间ID + SpaceId string `json:"-" validate:"required"` + + //文件ID + FileId string `json:"-" validate:"required"` + + //用户unionId + UnionId string `json:"unionId" validate:"required"` + + //权限角色。 + // + //owner:所有者 + //admin:管理员 + //editor:可编辑 + //viewer:可查看/下载 + //only_viewer:只读 + Role string `json:"role"` + + //成员权限列表 + Members []driveSpacesFileMember `json:"members"` +} + +type driveSpacesFileMember struct { + //企业的CorpId + CorpId string `json:"corpId"` + + //成员ID。 + // + //当memberType为org时,取值为corpId + //当memberType为department时,取值为deptId + //当memberType为conversation时,取值为chatId + //当memberType为user时,取值为staffId + MemberId string `json:"memberId"` + + //成员类型。 + // + //org:企业 + //department:部门 + //conversation:群 + //user:用户 + MemberType string `json:"memberType"` +} + +type addDriveSpacesFilesPermissionsBuilder struct { + fp *AddDriveSpacesFilesPermissions +} + +func newDriveSpacesFileMember(corpId, memberId string, mt member.Type) driveSpacesFileMember { + return driveSpacesFileMember{corpId, memberId, string(mt)} +} + +func NewAddDriveSpacesFilesPermissions() *addDriveSpacesFilesPermissionsBuilder { + return &addDriveSpacesFilesPermissionsBuilder{fp: &AddDriveSpacesFilesPermissions{}} +} + +func (b *addDriveSpacesFilesPermissionsBuilder) SetSpaceId(spaceId string) *addDriveSpacesFilesPermissionsBuilder { + b.fp.SpaceId = spaceId + return b +} + +func (b *addDriveSpacesFilesPermissionsBuilder) SetFileId(fileId string) *addDriveSpacesFilesPermissionsBuilder { + b.fp.FileId = fileId + return b +} + +func (b *addDriveSpacesFilesPermissionsBuilder) SetUnionId(unionId string) *addDriveSpacesFilesPermissionsBuilder { + b.fp.UnionId = unionId + return b +} + +func (b *addDriveSpacesFilesPermissionsBuilder) SetRole(role role.SpacesRole) *addDriveSpacesFilesPermissionsBuilder { + b.fp.Role = string(role) + return b +} + +func (b *addDriveSpacesFilesPermissionsBuilder) SetSpacesFileMember(corpId, memberId string, + mt member.Type) *addDriveSpacesFilesPermissionsBuilder { + members := b.fp.Members + b.fp.Members = append(members, newDriveSpacesFileMember(corpId, memberId, mt)) + return b +} + +func (b *addDriveSpacesFilesPermissionsBuilder) Build() *AddDriveSpacesFilesPermissions { + return b.fp +} diff --git a/request/add_drive_spaces_files_permissions_test.go b/request/add_drive_spaces_files_permissions_test.go new file mode 100644 index 0000000..abf7d1f --- /dev/null +++ b/request/add_drive_spaces_files_permissions_test.go @@ -0,0 +1,51 @@ +/* + * Copyright 2020 zhaoyunxing. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package request + +import ( + "testing" +) + +import ( + "github.com/stretchr/testify/assert" +) + +import ( + "github.com/zhaoyunxing92/dingtalk/v2/constant/member" + "github.com/zhaoyunxing92/dingtalk/v2/constant/role" +) + +func TestNewAddDriveSpacesFilesPermissions(t *testing.T) { + + permissions := NewAddDriveSpacesFilesPermissions(). + SetSpaceId("spaceId"). + SetFileId("fileId"). + SetUnionId("unionId"). + SetRole(role.Admin). + SetSpacesFileMember("corpId", "memberId", member.User). + SetSpacesFileMember("corpId", "memberId", member.User). + Build() + + assert.NotNil(t, permissions) +} + +//newDriveSpacesFileMember +func TestNewDriveSpacesFileMember(t *testing.T) { + fm := newDriveSpacesFileMember("corpId", "memberId", member.Conversation) + + assert.NotNil(t, fm) +}