fix: 修复角色分配权限并发竞态导致唯一约束冲突报错
All checks were successful
构建并部署到测试环境(无 SSH) / build-and-deploy (push) Successful in 7m4s

- Store 层 Create 方法对唯一约束冲突幂等处理,消除并发写入报错
- Service 层预批量加载角色已有权限集合(1次查询),替换逐条 Exists 查询(N次查询),同时降低竞态窗口

💘 Generated with Crush

Assisted-by: Claude Sonnet 4.6 via Crush <crush@charm.land>
This commit is contained in:
2026-04-09 11:58:52 +08:00
parent 81ba84cf05
commit fce35e8a2d
2 changed files with 16 additions and 3 deletions

View File

@@ -23,9 +23,13 @@ func NewRolePermissionStore(db *gorm.DB, redisClient *redis.Client) *RolePermiss
}
}
// Create 创建角色-权限关联
// Create 创建角色-权限关联,唯一约束冲突时幂等处理
func (s *RolePermissionStore) Create(ctx context.Context, rp *model.RolePermission) error {
if err := s.db.WithContext(ctx).Create(rp).Error; err != nil {
// 并发竞态导致唯一约束冲突,视为已存在,幂等返回
if isUniqueViolation(err) {
return nil
}
return err
}
s.clearRoleUsersCaches(ctx, rp.RoleID)