TangSengDaoDao / TangSengDaoDaoServer

高颜值 IM 即时通讯,聊天
https://tsdaodao.com
Apache License 2.0
2.41k stars 338 forks source link

管理端移除群成员问题(因为我只负责后端,不是很确定是不是bug) #113

Closed wangzhenzhenzhen closed 1 month ago

wangzhenzhenzhen commented 2 months ago

现象

在 group/api_manager.go中 如下代码是移除群成员的代码

// 移除群成员 func (m Manager) removeMember(c wkhttp.Context) { err := c.CheckLoginRoleIsSuperAdmin() if err != nil { c.ResponseError(err) return } c.Request.URL.Path = fmt.Sprintf("/v1/groups/%s/members", c.Param("group_no")) m.ctx.GetHttpRoute().HandleContext(c) } 这一行代码会走另外的一个接口或者方法吧 c.Request.URL.Path = fmt.Sprintf("/v1/groups/%s/members", c.Param("group_no")) 到了 group/api.go 的 func (g Group) memberRemove(c wkhttp.Context) 方法里有个判断我觉的是不是有问题。

if c.CheckLoginRole() == nil { loginMember, err = g.db.QueryMemberWithUID(operator, groupNo)。。。。。

这里的if c.CheckLoginRole() == nil 是不是应该是 !=nil 因为后面代码有 for _, member := range deleteMembers { if loginMember.Role == int(common.GroupMemberRoleManager) 。。。。。

loginMember此时是 nil 。 loginMember.Role 就会报错。

No8blackball commented 2 months ago

现象

在 group/api_manager.go中 如下代码是移除群成员的代码

// 移除群成员 func (m Manager) removeMember(c wkhttp.Context) { err := c.CheckLoginRoleIsSuperAdmin() if err != nil { c.ResponseError(err) return } c.Request.URL.Path = fmt.Sprintf("/v1/groups/%s/members", c.Param("group_no")) m.ctx.GetHttpRoute().HandleContext(c) } 这一行代码会走另外的一个接口或者方法吧 c.Request.URL.Path = fmt.Sprintf("/v1/groups/%s/members", c.Param("group_no")) 到了 group/api.go 的 func (g Group) memberRemove(c wkhttp.Context) 方法里有个判断我觉的是不是有问题。

if c.CheckLoginRole() == nil { loginMember, err = g.db.QueryMemberWithUID(operator, groupNo)。。。。。

这里的if c.CheckLoginRole() == nil 是不是应该是 !=nil 因为后面代码有 for _, member := range deleteMembers { if loginMember.Role == int(common.GroupMemberRoleManager) 。。。。。

loginMember此时是 nil 。 loginMember.Role 就会报错。

已修复,更新下main分支