fix: 按角色规范后台用户商户绑定
This commit is contained in:
@@ -468,7 +468,7 @@ func (s *sAdminMember) Edit(ctx context.Context, in *adminin.MemberEditInp) (err
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if service.AdminMember().VerifySuperId(ctx, opMemberId) {
|
if service.AdminMember().VerifySuperId(ctx, opMemberId) || contexts.GetRoleKey(ctx) == consts.ImPlatformRoleKey {
|
||||||
if in.TenantId > 0 {
|
if in.TenantId > 0 {
|
||||||
count, queryErr := imtenant.RegistryDB().Model(dao.ImTenant.Table()).Safe().Ctx(ctx).
|
count, queryErr := imtenant.RegistryDB().Model(dao.ImTenant.Table()).Safe().Ctx(ctx).
|
||||||
Where(dao.ImTenant.Columns().Id, in.TenantId).
|
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 {
|
if err = service.AdminRole().VerifyRoleId(ctx, in.RoleId); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
if err = s.normalizeTenantByRole(ctx, in); err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
// 验证部门ID
|
// 验证部门ID
|
||||||
if err = service.AdminDept().VerifyDeptId(ctx, in.DeptId); err != nil {
|
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 获取用户信息
|
// View 获取用户信息
|
||||||
func (s *sAdminMember) View(ctx context.Context, in *adminin.MemberViewInp) (res *adminin.MemberViewModel, err error) {
|
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 {
|
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