fix: 按角色规范后台用户商户绑定
This commit is contained in:
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user