From f0a1c0ab06fe371d6a2342c571370f6c1bac8d46 Mon Sep 17 00:00:00 2001 From: lishuang Date: Sat, 22 Jul 2023 20:05:25 +0800 Subject: [PATCH] feat: fix the role in space memeber. --- code/rest/space_member_controller.go | 6 ++++-- code/rest/space_member_model.go | 4 ++-- code/rest/space_service.go | 21 ++++++++++++++++++--- 3 files changed, 24 insertions(+), 7 deletions(-) diff --git a/code/rest/space_member_controller.go b/code/rest/space_member_controller.go index 3e6fd73..7374cb4 100644 --- a/code/rest/space_member_controller.go +++ b/code/rest/space_member_controller.go @@ -58,9 +58,11 @@ func (this *SpaceMemberController) RegisterRoutes() map[string]func(writer http. routeMap := make(map[string]func(writer http.ResponseWriter, request *http.Request)) + //admin user can create/edit/delete routeMap["/api/space/member/create"] = this.Wrap(this.Create, USER_ROLE_USER) routeMap["/api/space/member/edit"] = this.Wrap(this.Edit, USER_ROLE_USER) routeMap["/api/space/member/delete"] = this.Wrap(this.Delete, USER_ROLE_USER) + routeMap["/api/space/member/detail"] = this.Wrap(this.Detail, USER_ROLE_USER) routeMap["/api/space/member/mine"] = this.Wrap(this.Mine, USER_ROLE_USER) routeMap["/api/space/member/page"] = this.Wrap(this.Page, USER_ROLE_USER) @@ -110,7 +112,7 @@ func (this *SpaceMemberController) Edit(writer http.ResponseWriter, request *htt spaceMember := this.spaceMemberDao.CheckByUuid(uuid) currentUser := this.checkUser(request) - canManage := this.spaceMemberService.canManageBySpaceMember(currentUser, spaceMember) + canManage := this.spaceMemberService.canManage(currentUser, spaceMember.SpaceUuid) if !canManage { panic(result.BadRequestI18n(request, i18n.PermissionDenied)) } @@ -126,7 +128,7 @@ func (this *SpaceMemberController) Delete(writer http.ResponseWriter, request *h spaceMember := this.spaceMemberDao.CheckByUuid(uuid) user := this.checkUser(request) - canManage := this.spaceMemberService.canManageBySpaceMember(user, spaceMember) + canManage := this.spaceMemberService.canManage(user, spaceMember.SpaceUuid) if !canManage { panic(result.BadRequestI18n(request, i18n.PermissionDenied)) } diff --git a/code/rest/space_member_model.go b/code/rest/space_member_model.go index d3a5495..37cc6a0 100644 --- a/code/rest/space_member_model.go +++ b/code/rest/space_member_model.go @@ -5,13 +5,13 @@ import ( ) const ( - //read only member + //guest member SPACE_MEMBER_GUEST = "GUEST" //read only member SPACE_MEMBER_ROLE_READ_ONLY = "READ_ONLY" //read write member SPACE_MEMBER_ROLE_READ_WRITE = "READ_WRITE" - //read write member + //admin member SPACE_MEMBER_ROLE_ADMIN = "ADMIN" ) diff --git a/code/rest/space_service.go b/code/rest/space_service.go index 5fd12b7..e9aecd6 100644 --- a/code/rest/space_service.go +++ b/code/rest/space_service.go @@ -105,6 +105,21 @@ func (this *SpaceService) CreateSpace( } +// checkout a adminAble space. +func (this *SpaceService) CheckAdminAbleByUuid(request *http.Request, user *User, spaceUuid string) *Space { + space := this.spaceDao.CheckByUuid(spaceUuid) + if space.Type == SPACE_TYPE_PRIVATE && user.Uuid == space.UserUuid { + return space + } + + manage := this.spaceMemberService.canManage(user, spaceUuid) + if !manage { + panic(result.BadRequestI18n(request, i18n.PermissionDenied)) + } + + return space +} + // checkout a writable space. func (this *SpaceService) CheckWritableByUuid(request *http.Request, user *User, spaceUuid string) *Space { space := this.spaceDao.CheckByUuid(spaceUuid) @@ -112,8 +127,8 @@ func (this *SpaceService) CheckWritableByUuid(request *http.Request, user *User, return space } - manage := this.spaceMemberService.canWrite(user, spaceUuid) - if !manage { + writable := this.spaceMemberService.canWrite(user, spaceUuid) + if !writable { panic(result.BadRequestI18n(request, i18n.PermissionDenied)) } @@ -137,7 +152,7 @@ func (this *SpaceService) CheckReadableByUuid(request *http.Request, user *User, // edit space's info func (this *SpaceService) Edit(request *http.Request, user *User, spaceUuid string, sizeLimit int64, totalSizeLimit int64) *Space { - space := this.CheckWritableByUuid(request, user, spaceUuid) + space := this.CheckAdminAbleByUuid(request, user, spaceUuid) if sizeLimit < 0 && sizeLimit != -1 { panic("sizeLimit cannot be negative expect -1.")