From f154b9e3c3d299f64b0a9c88b53b2675be821508 Mon Sep 17 00:00:00 2001 From: richjohnrambo Date: Sun, 20 Sep 2026 21:03:54 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E6=8C=89=E8=A7=92=E8=89=B2=E8=A7=84?= =?UTF-8?q?=E8=8C=83=E5=90=8E=E5=8F=B0=E7=94=A8=E6=88=B7=E5=95=86=E6=88=B7?= =?UTF-8?q?=E7=BB=91=E5=AE=9A?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/internal/logic/admin/member.go | 49 ++++++++++++++++++++++++++- 1 file changed, 48 insertions(+), 1 deletion(-) diff --git a/server/internal/logic/admin/member.go b/server/internal/logic/admin/member.go index 06f5683..b4431b5 100644 --- a/server/internal/logic/admin/member.go +++ b/server/internal/logic/admin/member.go @@ -468,7 +468,7 @@ func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err return } - if service.AdminMember().VerifySuperId(ctx, opMemberId) { + if service.AdminMember().VerifySuperId(ctx, opMemberId) || contexts.GetRoleKey(ctx) == consts.ImPlatformRoleKey { if in.TenantId > 0 { count, queryErr := imtenant.RegistryDB().Model(dao.ImTenant.Table()).Safe().Ctx(ctx). Where(dao.ImTenant.Columns().Id, in.TenantId). @@ -508,6 +508,9 @@ func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err if err = service.AdminRole().VerifyRoleId(ctx, in.RoleId); err != nil { return } + if err = s.normalizeTenantByRole(ctx, in); err != nil { + return + } // 验证部门ID if err = service.AdminDept().VerifyDeptId(ctx, in.DeptId); err != nil { @@ -606,6 +609,50 @@ func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err }) } +func (s *sAdminMember) normalizeTenantByRole(ctx context.Context, in *adminin.MemberEditInp) error { + var role *entity.AdminRole + if err := dao.AdminRole.Ctx(ctx). + Fields(dao.AdminRole.Columns().Id, dao.AdminRole.Columns().Key). + WherePri(in.RoleId). + Scan(&role); err != nil { + return gerror.Wrap(err, "获取角色信息失败,请稍后重试!") + } + if role == nil || role.Id <= 0 { + return gerror.New("角色不存在") + } + switch role.Key { + case consts.ImPlatformRoleKey: + deptId, err := s.getCompanyDeptId(ctx) + if err != nil { + return err + } + in.TenantId = 0 + in.DeptId = deptId + case "imManage": + if in.TenantId <= 0 { + return gerror.New("IM管理员必须选择所属商户") + } + } + return nil +} + +func (s *sAdminMember) getCompanyDeptId(ctx context.Context) (int64, error) { + value, err := dao.AdminDept.Ctx(ctx). + Fields(dao.AdminDept.Columns().Id). + Where(dao.AdminDept.Columns().Type, consts.DeptTypeCompany). + Where(dao.AdminDept.Columns().Status, consts.StatusEnabled). + OrderAsc(dao.AdminDept.Columns().Id). + Limit(1). + Value() + if err != nil { + return 0, gerror.Wrap(err, "获取公司部门失败,请稍后重试!") + } + if value.IsEmpty() { + return 0, gerror.New("请先配置公司部门") + } + return value.Int64(), nil +} + // View 获取用户信息 func (s *sAdminMember) View(ctx context.Context, in *adminin.MemberViewInp) (res *adminin.MemberViewModel, err error) { if err = s.FilterAuthModel(ctx, contexts.GetUserId(ctx)).Hook(hook.MemberInfo).WherePri(in.Id).Scan(&res); err != nil {