feat: add the spaceMember operations.

This commit is contained in:
lishuang
2023-05-13 16:12:37 +08:00
parent bf53df1dc3
commit a0869708aa
5 changed files with 87 additions and 4 deletions
+4
View File
@@ -67,6 +67,10 @@ func (this *SpaceController) Create(writer http.ResponseWriter, request *http.Re
sizeLimitStr := request.FormValue("sizeLimit")
totalSizeLimitStr := request.FormValue("totalSizeLimit")
if name == "" {
panic("name is required")
}
//only admin can edit user's sizeLimit
var sizeLimit int64 = 0
if sizeLimitStr == "" {
+51 -4
View File
@@ -3,6 +3,7 @@ package rest
import (
"github.com/eyebluecn/tank/code/core"
"github.com/eyebluecn/tank/code/tool/builder"
"github.com/eyebluecn/tank/code/tool/i18n"
"github.com/eyebluecn/tank/code/tool/result"
"net/http"
"strconv"
@@ -52,14 +53,45 @@ func (this *SpaceMemberController) RegisterRoutes() map[string]func(writer http.
routeMap := make(map[string]func(writer http.ResponseWriter, request *http.Request))
routeMap["/api/spaceMember/delete/batch"] = this.Wrap(this.DeleteBatch, USER_ROLE_USER)
routeMap["/api/spaceMember/detail"] = this.Wrap(this.Detail, USER_ROLE_USER)
routeMap["/api/spaceMember/page"] = this.Wrap(this.Page, USER_ROLE_USER)
routeMap["/api/space/member/create"] = this.Wrap(this.Create, 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/page"] = this.Wrap(this.Page, USER_ROLE_USER)
return routeMap
}
func (this *SpaceMemberController) DeleteBatch(writer http.ResponseWriter, request *http.Request) *result.WebResult {
func (this *SpaceMemberController) Create(writer http.ResponseWriter, request *http.Request) *result.WebResult {
spaceUuid := request.FormValue("spaceUuid")
userUuid := request.FormValue("userUuid")
spaceRole := request.FormValue("spaceRole")
if spaceUuid == "" {
panic("spaceUuid is required")
}
if spaceRole != SPACE_MEMBER_ROLE_READ_ONLY && spaceRole != SPACE_MEMBER_ROLE_READ_WRITE && spaceRole != SPACE_MEMBER_ROLE_ADMIN {
panic("spaceRole is not correct")
}
currentUser := this.checkUser(request)
canManage := this.canManage(currentUser, spaceUuid)
if !canManage {
panic(result.BadRequestI18n(request, i18n.PermissionDenied))
}
//check whether exists.
spaceMember := this.spaceMemberDao.FindBySpaceUuidAndUserUuid(spaceUuid, userUuid)
if spaceMember != nil {
panic(result.BadRequestI18n(request, i18n.SpaceMemberExist))
}
spaceMember = this.spaceMemberService.CreateMember(spaceUuid, userUuid, spaceRole)
return this.Success(spaceMember)
}
func (this *SpaceMemberController) Delete(writer http.ResponseWriter, request *http.Request) *result.WebResult {
uuids := request.FormValue("uuids")
if uuids == "" {
@@ -134,3 +166,18 @@ func (this *SpaceMemberController) Page(writer http.ResponseWriter, request *htt
return this.Success(pager)
}
// 当前用户对于此空间,是否有管理权限。
func (this *SpaceMemberController) canManage(user *User, spaceUuid string) bool {
if user.Role == USER_ROLE_ADMINISTRATOR {
return true
}
//only space's admin can add member.
spaceMember := this.spaceMemberDao.FindBySpaceUuidAndUserUuid(spaceUuid, user.Uuid)
if spaceMember != nil && spaceMember.Role == SPACE_MEMBER_ROLE_ADMIN {
return true
}
return false
}
+15
View File
@@ -37,6 +37,21 @@ func (this *SpaceMemberDao) CheckByUuid(uuid string) *SpaceMember {
return entity
}
// find by spaceUuid and userUuid. if not found return nil.
func (this *SpaceMemberDao) FindBySpaceUuidAndUserUuid(spaceUuid string, userUuid string) *SpaceMember {
var entity = &SpaceMember{}
db := core.CONTEXT.GetDB().Where("space_uuid = ? AND user_uuid = ?", spaceUuid, userUuid).First(entity)
if db.Error != nil {
if db.Error.Error() == result.DB_ERROR_NOT_FOUND {
return nil
} else {
panic(db.Error)
}
}
return entity
}
func (this *SpaceMemberDao) Page(page int, pageSize int, userUuid string, sortArray []builder.OrderPair) *Pager {
count, spaceMembers := this.PlainPage(page, pageSize, userUuid, sortArray)
+15
View File
@@ -44,3 +44,18 @@ func (this *SpaceMemberService) Detail(uuid string) *SpaceMember {
return spaceMember
}
// create space
func (this *SpaceMemberService) CreateMember(spaceUuid string, userUuid string, spaceRole string) *SpaceMember {
spaceMember := &SpaceMember{
SpaceUuid: spaceUuid,
UserUuid: userUuid,
Role: spaceRole,
}
spaceMember = this.spaceMemberDao.Create(spaceMember)
return spaceMember
}
+2
View File
@@ -49,6 +49,8 @@ var (
CronValidateError = &Item{English: `cron error. five fields needed. eg: 1 * * * *`, Chinese: `Cron表达式错误,必须为5位。例如:1 * * * *`}
SpaceNameError = &Item{English: `space's name can only be letters, numbers or _`, Chinese: `共享空间名称必填,且只能包含中文,字母,数字和'_'`}
SpaceNameExist = &Item{English: `space's name "%s" exists`, Chinese: `共享空间名称"%s"已存在`}
SpaceMemberExist = &Item{English: `space member exists`, Chinese: `该用于已经是空间的成员`}
PermissionDenied = &Item{English: `permission denied.`, Chinese: `没有操作权限`}
)
func (this *Item) Message(request *http.Request) string {