@@ -217,6 +217,7 @@ type SqlWorkbenchUser struct {
217217type SqlWorkbenchUserRepo interface {
218218 GetSqlWorkbenchUserByDMSUserID (ctx context.Context , dmsUserID string ) (* SqlWorkbenchUser , bool , error )
219219 SaveSqlWorkbenchUserCache (ctx context.Context , user * SqlWorkbenchUser ) error
220+ DeleteSqlWorkbenchUserCache (ctx context.Context , dmsUserID string ) error
220221}
221222
222223// SqlWorkbenchDatasource SqlWorkbench数据源缓存
@@ -233,9 +234,15 @@ type SqlWorkbenchDatasourceRepo interface {
233234 GetSqlWorkbenchDatasourceByDMSDBServiceID (ctx context.Context , dmsDBServiceID , dmsUserID , purpose string ) (* SqlWorkbenchDatasource , bool , error )
234235 SaveSqlWorkbenchDatasourceCache (ctx context.Context , datasource * SqlWorkbenchDatasource ) error
235236 DeleteSqlWorkbenchDatasourceCache (ctx context.Context , dmsDBServiceID , dmsUserID , purpose string ) error
237+ DeleteSqlWorkbenchDatasourceCachesByUserID (ctx context.Context , dmsUserID string ) error
236238 GetSqlWorkbenchDatasourcesByUserID (ctx context.Context , dmsUserID string ) ([]* SqlWorkbenchDatasource , error )
237239}
238240
241+ // SqlWorkbenchLifecycle 删除 DMS 用户时的 SqlWorkbench/ODC 生命周期清理(策略 B)
242+ type SqlWorkbenchLifecycle interface {
243+ CleanupOnDMSUserDelete (ctx context.Context , dmsUserID , dmsUserName string ) error
244+ }
245+
239246type UserUsecase struct {
240247 tx TransactionGenerator
241248 repo UserRepo
@@ -247,9 +254,15 @@ type UserUsecase struct {
247254 ldapConfigurationUsecase * LDAPConfigurationUsecase
248255 cloudBeaverRepo CloudbeaverRepo
249256 gatewayUsecase * GatewayUsecase
257+ sqlWorkbenchLifecycle SqlWorkbenchLifecycle
250258 log * utilLog.Helper
251259}
252260
261+ // SetSqlWorkbenchLifecycle 注入策略 B 清理能力(由 apiserver 在 SqlWorkbenchService 就绪后接线)
262+ func (d * UserUsecase ) SetSqlWorkbenchLifecycle (lifecycle SqlWorkbenchLifecycle ) {
263+ d .sqlWorkbenchLifecycle = lifecycle
264+ }
265+
253266func NewUserUsecase (log utilLog.Logger , tx TransactionGenerator , repo UserRepo , userGroupRepo UserGroupRepo , pluginUsecase * PluginUsecase , opPermissionUsecase * OpPermissionUsecase ,
254267 OpPermissionVerifyUsecase * OpPermissionVerifyUsecase , loginConfigurationUsecase * LoginConfigurationUsecase , ldapConfigurationUsecase * LDAPConfigurationUsecase , cloudBeaverRepo CloudbeaverRepo , gatewayUsecase * GatewayUsecase ,
255268) * UserUsecase {
@@ -719,6 +732,13 @@ func (d *UserUsecase) DelUser(ctx context.Context, currentUserUid, UserUid strin
719732 return fmt .Errorf ("delete cloudbeaver cache failed: %v" , err )
720733 }
721734
735+ // 策略 B:清 SqlWorkbench 缓存 + 会话,并对 ODC 对应用户禁用(ODC 失败不阻断)
736+ if d .sqlWorkbenchLifecycle != nil {
737+ if err := d .sqlWorkbenchLifecycle .CleanupOnDMSUserDelete (tx , UserUid , ds .Name ); err != nil {
738+ return fmt .Errorf ("delete sql workbench cache failed: %v" , err )
739+ }
740+ }
741+
722742 if err := d .repo .DelUser (tx , UserUid ); nil != err {
723743 return fmt .Errorf ("delete user error: %v" , err )
724744 }
0 commit comments