mirror of
https://github.com/eyebluecn/tank.git
synced 2024-04-21 12:32:16 +00:00
feat: add the spaceMember operations.
This commit is contained in:
@@ -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 == "" {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
|
||||
@@ -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)
|
||||
|
||||
@@ -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
|
||||
|
||||
}
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user