feat: add the member page api.

This commit is contained in:
lishuang
2023-05-13 17:18:01 +08:00
parent bd78b87d6f
commit d976abdb84
4 changed files with 76 additions and 9 deletions
+1 -1
View File
@@ -184,7 +184,7 @@ func (this *SpaceController) Page(writer http.ResponseWriter, request *http.Requ
pager = this.spaceDao.Page(page, pageSize, sortArray)
}
//fill the space's user.
//fill the space's user. FIXME: user better way to get User.
if pager != nil {
for _, space := range pager.Data.([]*Space) {
space.User = this.userDao.FindByUuid(space.UserUuid)
+69 -3
View File
@@ -143,8 +143,7 @@ func (this *SpaceMemberController) Page(writer http.ResponseWriter, request *htt
pageStr := request.FormValue("page")
pageSizeStr := request.FormValue("pageSize")
orderCreateTime := request.FormValue("orderCreateTime")
user := this.checkUser(request)
spaceUuid := request.FormValue("spaceUuid")
var page int
if pageStr != "" {
@@ -159,6 +158,16 @@ func (this *SpaceMemberController) Page(writer http.ResponseWriter, request *htt
}
}
if spaceUuid == "" {
panic(result.BadRequest("spaceUuid cannot be null"))
}
user := this.checkUser(request)
canRead := this.canRead(user, spaceUuid)
if !canRead {
panic(result.BadRequestI18n(request, i18n.PermissionDenied))
}
sortArray := []builder.OrderPair{
{
Key: "create_time",
@@ -166,7 +175,14 @@ func (this *SpaceMemberController) Page(writer http.ResponseWriter, request *htt
},
}
pager := this.spaceMemberDao.Page(page, pageSize, user.Uuid, sortArray)
pager := this.spaceMemberDao.Page(page, pageSize, spaceUuid, sortArray)
//fill the space's user. FIXME: user better way to get User.
if pager != nil {
for _, spaceMember := range pager.Data.([]*SpaceMember) {
spaceMember.User = this.userDao.FindByUuid(spaceMember.UserUuid)
}
}
return this.Success(pager)
}
@@ -182,6 +198,28 @@ func (this *SpaceMemberController) canManage(user *User, spaceUuid string) bool
return this.canManageBySpaceMember(user, spaceMember)
}
// 当前用户对于此空间,是否有可读权限。
func (this *SpaceMemberController) canRead(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)
return this.canReadBySpaceMember(user, spaceMember)
}
// 当前用户对于此空间,是否有可写权限。
func (this *SpaceMemberController) canWrite(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)
return this.canWriteBySpaceMember(user, spaceMember)
}
// 当前用户对于此空间,是否有管理权限。
func (this *SpaceMemberController) canManageBySpaceMember(user *User, member *SpaceMember) bool {
if user.Role == USER_ROLE_ADMINISTRATOR {
@@ -195,3 +233,31 @@ func (this *SpaceMemberController) canManageBySpaceMember(user *User, member *Sp
return false
}
// 当前用户对于此空间,是否有可读权限。
func (this *SpaceMemberController) canReadBySpaceMember(user *User, member *SpaceMember) bool {
if user.Role == USER_ROLE_ADMINISTRATOR {
return true
}
//only space's admin can add member.
if member != nil {
return true
}
return false
}
// 当前用户对于此空间,是否有科协权限。
func (this *SpaceMemberController) canWriteBySpaceMember(user *User, member *SpaceMember) bool {
if user.Role == USER_ROLE_ADMINISTRATOR {
return true
}
//only space's admin can add member.
if member != nil && (member.Role == SPACE_MEMBER_ROLE_ADMIN || member.Role == SPACE_MEMBER_ROLE_READ_WRITE) {
return true
}
return false
}
+5 -5
View File
@@ -52,20 +52,20 @@ func (this *SpaceMemberDao) FindBySpaceUuidAndUserUuid(spaceUuid string, userUui
return entity
}
func (this *SpaceMemberDao) Page(page int, pageSize int, userUuid string, sortArray []builder.OrderPair) *Pager {
func (this *SpaceMemberDao) Page(page int, pageSize int, spaceUuid string, sortArray []builder.OrderPair) *Pager {
count, spaceMembers := this.PlainPage(page, pageSize, userUuid, sortArray)
count, spaceMembers := this.PlainPage(page, pageSize, spaceUuid, sortArray)
pager := NewPager(page, pageSize, count, spaceMembers)
return pager
}
func (this *SpaceMemberDao) PlainPage(page int, pageSize int, userUuid string, sortArray []builder.OrderPair) (int, []*SpaceMember) {
func (this *SpaceMemberDao) PlainPage(page int, pageSize int, spaceUuid string, sortArray []builder.OrderPair) (int, []*SpaceMember) {
var wp = &builder.WherePair{}
if userUuid != "" {
wp = wp.And(&builder.WherePair{Query: "user_uuid = ?", Args: []interface{}{userUuid}})
if spaceUuid != "" {
wp = wp.And(&builder.WherePair{Query: "space_uuid = ?", Args: []interface{}{spaceUuid}})
}
var conditionDB *gorm.DB
+1
View File
@@ -24,4 +24,5 @@ type SpaceMember struct {
SpaceUuid string `json:"spaceUuid" gorm:"type:char(36);index:idx_space_uuid"`
UserUuid string `json:"userUuid" gorm:"type:char(36);index:idx_user_uuid"`
Role string `json:"role" gorm:"type:varchar(45)"`
User *User `json:"user" gorm:"-"`
}