fix: 禁用角色时检查是否已分配给账号或店铺
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
Some checks failed
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Has been cancelled
角色禁用前新增分配情况检查,若角色已分配给账号或店铺则拒绝禁用操作, 需先移除相关分配后才能禁用,与删除角色的防护逻辑保持一致。 Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -313,6 +313,7 @@ func (s *Service) BatchRemovePermissions(ctx context.Context, roleID uint, permI
|
|||||||
}
|
}
|
||||||
|
|
||||||
// UpdateStatus 更新角色状态
|
// UpdateStatus 更新角色状态
|
||||||
|
// 禁用角色时,若角色已分配给账号或店铺,则拒绝操作
|
||||||
func (s *Service) UpdateStatus(ctx context.Context, id uint, status int) error {
|
func (s *Service) UpdateStatus(ctx context.Context, id uint, status int) error {
|
||||||
currentUserID := middleware.GetUserIDFromContext(ctx)
|
currentUserID := middleware.GetUserIDFromContext(ctx)
|
||||||
if currentUserID == 0 {
|
if currentUserID == 0 {
|
||||||
@@ -327,6 +328,23 @@ func (s *Service) UpdateStatus(ctx context.Context, id uint, status int) error {
|
|||||||
return errors.Wrap(errors.CodeInternalError, err, "获取角色失败")
|
return errors.Wrap(errors.CodeInternalError, err, "获取角色失败")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 禁用角色时检查是否已有分配
|
||||||
|
if status == constants.StatusDisabled {
|
||||||
|
accountCount, err := s.accountRoleStore.CountByRoleID(ctx, id)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(errors.CodeInternalError, err, "检查角色分配情况失败")
|
||||||
|
}
|
||||||
|
|
||||||
|
shopCount, err := s.shopRoleStore.CountByRoleID(ctx, id)
|
||||||
|
if err != nil {
|
||||||
|
return errors.Wrap(errors.CodeInternalError, err, "检查角色分配情况失败")
|
||||||
|
}
|
||||||
|
|
||||||
|
if accountCount > 0 || shopCount > 0 {
|
||||||
|
return errors.New(errors.CodeRoleInUse, fmt.Sprintf("该角色已分配给 %d 个账号、%d 个店铺,请先移除相关分配后再禁用", accountCount, shopCount))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
role.Status = status
|
role.Status = status
|
||||||
role.Updater = currentUserID
|
role.Updater = currentUserID
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user