fix: [FL-195][创建用户报错] 为用户服务事务添加异常处理和回滚机制
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com> Co-authored-by: multica-agent <github@multica.ai>
This commit is contained in:
@@ -114,6 +114,7 @@ def create_user(
|
||||
status="ENABLED",
|
||||
)
|
||||
|
||||
try:
|
||||
db.add(user)
|
||||
db.flush()
|
||||
_assign_legacy_roles(db, user_id, [])
|
||||
@@ -128,6 +129,9 @@ def create_user(
|
||||
),
|
||||
)
|
||||
db.commit()
|
||||
except SQLAlchemyError:
|
||||
db.rollback()
|
||||
return None
|
||||
|
||||
created = get_user_by_id(db, user_id)
|
||||
if created:
|
||||
@@ -150,6 +154,7 @@ def delete_user(db: Session, user_id: str, *, actor_user_id: str | None) -> bool
|
||||
return False
|
||||
|
||||
target_username = user.username
|
||||
try:
|
||||
revoke_active_sessions_for_user(db, user_id)
|
||||
write_audit_log(
|
||||
db,
|
||||
@@ -162,6 +167,9 @@ def delete_user(db: Session, user_id: str, *, actor_user_id: str | None) -> bool
|
||||
)
|
||||
db.delete(user)
|
||||
db.commit()
|
||||
except SQLAlchemyError:
|
||||
db.rollback()
|
||||
return False
|
||||
|
||||
_fire_and_forget(
|
||||
publish_topic(
|
||||
@@ -186,6 +194,7 @@ def reset_user_password(
|
||||
if not user:
|
||||
return None
|
||||
|
||||
try:
|
||||
user.password_hash = hash_password(payload.new_password)
|
||||
revoke_active_sessions_for_user(db, user_id)
|
||||
write_audit_log(
|
||||
@@ -200,6 +209,9 @@ def reset_user_password(
|
||||
),
|
||||
)
|
||||
db.commit()
|
||||
except SQLAlchemyError:
|
||||
db.rollback()
|
||||
return None
|
||||
|
||||
updated = get_user_by_id(db, user_id)
|
||||
if updated:
|
||||
@@ -276,6 +288,7 @@ def update_user(
|
||||
if not changed_fields:
|
||||
return serialize_user(user)
|
||||
|
||||
try:
|
||||
write_audit_log(
|
||||
db,
|
||||
action="user.update",
|
||||
@@ -292,6 +305,10 @@ def update_user(
|
||||
),
|
||||
)
|
||||
db.commit()
|
||||
except SQLAlchemyError:
|
||||
db.rollback()
|
||||
return None
|
||||
|
||||
updated = get_user_by_id(db, user_id)
|
||||
if updated:
|
||||
queue_user_auth_refresh(updated, status_changed=status_changed)
|
||||
@@ -339,6 +356,7 @@ def set_user_roles(
|
||||
updated = get_user_by_id(db, user_id)
|
||||
if updated:
|
||||
authz = get_user_authorization(db, updated.id)
|
||||
try:
|
||||
write_audit_log(
|
||||
db,
|
||||
action="user.roles.replace",
|
||||
@@ -350,6 +368,9 @@ def set_user_roles(
|
||||
),
|
||||
)
|
||||
db.commit()
|
||||
except SQLAlchemyError:
|
||||
db.rollback()
|
||||
return None
|
||||
queue_user_auth_refresh(updated)
|
||||
_fire_and_forget(
|
||||
publish_topic(
|
||||
|
||||
Reference in New Issue
Block a user