From a9c0a9a3641275d4472f04a16d1526d701f89bb6 Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 2 Jun 2023 20:00:45 +0800 Subject: [PATCH 1/2] MuteGroupMember --- .gitignore | 1 - internal/rpc/group/group.go | 51 ++++++++++++++++++++++++++++++++----- 2 files changed, 44 insertions(+), 8 deletions(-) diff --git a/.gitignore b/.gitignore index 48cdc7f72..6f8c0931d 100644 --- a/.gitignore +++ b/.gitignore @@ -2,7 +2,6 @@ bin logs .devcontainer components -logs out-test .github .idea diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index 1a61fb041..a9ab42309 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1129,17 +1129,29 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGrou func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGroupMemberReq) (*pbGroup.MuteGroupMemberResp, error) { resp := &pbGroup.MuteGroupMemberResp{} + if err := tokenverify.CheckAccessV3(ctx, req.UserID); err != nil { + return nil, err + } member, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, req.UserID) if err != nil { return nil, err } - if !(mcontext.GetOpUserID(ctx) == req.UserID || tokenverify.IsAppManagerUid(ctx)) { - opMember, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, req.UserID) + if !tokenverify.IsAppManagerUid(ctx) { + opMember, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, mcontext.GetOpUserID(ctx)) if err != nil { return nil, err } - if opMember.RoleLevel <= member.RoleLevel { - return nil, errs.ErrNoPermission.Wrap(fmt.Sprintf("self RoleLevel %d target %d", opMember.RoleLevel, member.RoleLevel)) + switch member.RoleLevel { + case constant.GroupOwner: + return nil, errs.ErrNoPermission.Wrap("set group owner mute") + case constant.GroupAdmin: + if opMember.RoleLevel != constant.GroupOwner { + return nil, errs.ErrNoPermission.Wrap("set group admin mute") + } + case constant.GroupOrdinaryUsers: + if !(opMember.RoleLevel == constant.GroupAdmin || opMember.RoleLevel == constant.GroupOwner) { + return nil, errs.ErrNoPermission.Wrap("set group ordinary users mute") + } } } data := UpdateGroupMemberMutedTimeMap(time.Now().Add(time.Second * time.Duration(req.MutedSeconds))) @@ -1152,17 +1164,42 @@ func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGrou func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.CancelMuteGroupMemberReq) (*pbGroup.CancelMuteGroupMemberResp, error) { resp := &pbGroup.CancelMuteGroupMemberResp{} + //member, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, req.UserID) + //if err != nil { + // return nil, err + //} + //if !(mcontext.GetOpUserID(ctx) == req.UserID || tokenverify.IsAppManagerUid(ctx)) { + // opMember, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, mcontext.GetOpUserID(ctx)) + // if err != nil { + // return nil, err + // } + // if opMember.RoleLevel <= member.RoleLevel { + // return nil, errs.ErrNoPermission.Wrap(fmt.Sprintf("self RoleLevel %d target %d", opMember.RoleLevel, member.RoleLevel)) + // } + //} + if err := tokenverify.CheckAccessV3(ctx, req.UserID); err != nil { + return nil, err + } member, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, req.UserID) if err != nil { return nil, err } - if !(mcontext.GetOpUserID(ctx) == req.UserID || tokenverify.IsAppManagerUid(ctx)) { + if !tokenverify.IsAppManagerUid(ctx) { opMember, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, mcontext.GetOpUserID(ctx)) if err != nil { return nil, err } - if opMember.RoleLevel <= member.RoleLevel { - return nil, errs.ErrNoPermission.Wrap(fmt.Sprintf("self RoleLevel %d target %d", opMember.RoleLevel, member.RoleLevel)) + switch member.RoleLevel { + case constant.GroupOwner: + return nil, errs.ErrNoPermission.Wrap("set group owner mute") + case constant.GroupAdmin: + if opMember.RoleLevel != constant.GroupOwner { + return nil, errs.ErrNoPermission.Wrap("set group admin mute") + } + case constant.GroupOrdinaryUsers: + if !(opMember.RoleLevel == constant.GroupAdmin || opMember.RoleLevel == constant.GroupOwner) { + return nil, errs.ErrNoPermission.Wrap("set group ordinary users mute") + } } } data := UpdateGroupMemberMutedTimeMap(time.Unix(0, 0)) From 246fce1136ff8f84836adccf2fe236ece20dbedd Mon Sep 17 00:00:00 2001 From: withchao <993506633@qq.com> Date: Fri, 2 Jun 2023 20:12:10 +0800 Subject: [PATCH 2/2] MuteGroupMember --- internal/rpc/group/group.go | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/internal/rpc/group/group.go b/internal/rpc/group/group.go index a9ab42309..95169e417 100644 --- a/internal/rpc/group/group.go +++ b/internal/rpc/group/group.go @@ -1129,9 +1129,9 @@ func (s *groupServer) DismissGroup(ctx context.Context, req *pbGroup.DismissGrou func (s *groupServer) MuteGroupMember(ctx context.Context, req *pbGroup.MuteGroupMemberReq) (*pbGroup.MuteGroupMemberResp, error) { resp := &pbGroup.MuteGroupMemberResp{} - if err := tokenverify.CheckAccessV3(ctx, req.UserID); err != nil { - return nil, err - } + //if err := tokenverify.CheckAccessV3(ctx, req.UserID); err != nil { + // return nil, err + //} member, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, req.UserID) if err != nil { return nil, err @@ -1177,9 +1177,9 @@ func (s *groupServer) CancelMuteGroupMember(ctx context.Context, req *pbGroup.Ca // return nil, errs.ErrNoPermission.Wrap(fmt.Sprintf("self RoleLevel %d target %d", opMember.RoleLevel, member.RoleLevel)) // } //} - if err := tokenverify.CheckAccessV3(ctx, req.UserID); err != nil { - return nil, err - } + //if err := tokenverify.CheckAccessV3(ctx, req.UserID); err != nil { + // return nil, err + //} member, err := s.GroupDatabase.TakeGroupMember(ctx, req.GroupID, req.UserID) if err != nil { return nil, err