Skip to content

Commit 3c2c611

Browse files
committed
refac
1 parent a359262 commit 3c2c611

2 files changed

Lines changed: 30 additions & 19 deletions

File tree

backend/open_webui/models/users.py

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -239,15 +239,17 @@ class UserRoleUpdateForm(BaseModel):
239239

240240

241241
class UserUpdateForm(BaseModel):
242-
role: str
243-
name: str
244-
email: str
245-
profile_image_url: str
242+
role: Optional[str] = None
243+
name: Optional[str] = None
244+
email: Optional[str] = None
245+
profile_image_url: Optional[str] = None
246246
password: Optional[str] = None
247247

248-
@field_validator('profile_image_url')
248+
@field_validator('profile_image_url', mode='before')
249249
@classmethod
250-
def check_profile_image_url(cls, v: str) -> str:
250+
def check_profile_image_url(cls, v: Optional[str]) -> Optional[str]:
251+
if v is None:
252+
return v
251253
return validate_profile_image_url(v)
252254

253255

backend/open_webui/routers/users.py

Lines changed: 22 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -580,7 +580,7 @@ async def update_user_by_id(
580580
detail=ERROR_MESSAGES.ACTION_PROHIBITED,
581581
)
582582

583-
if form_data.role != 'admin':
583+
if form_data.role is not None and form_data.role != 'admin':
584584
# If the primary admin is trying to change their own role, prevent it
585585
raise HTTPException(
586586
status_code=status.HTTP_403_FORBIDDEN,
@@ -597,7 +597,7 @@ async def update_user_by_id(
597597
user = await Users.get_user_by_id(user_id, db=db)
598598

599599
if user:
600-
if form_data.email.lower() != user.email:
600+
if form_data.email is not None and form_data.email.lower() != user.email:
601601
email_user = await Users.get_user_by_email(form_data.email.lower(), db=db)
602602
if email_user:
603603
raise HTTPException(
@@ -614,17 +614,26 @@ async def update_user_by_id(
614614
hashed = get_password_hash(form_data.password)
615615
await Auths.update_user_password_by_id(user_id, hashed, db=db)
616616

617-
await Auths.update_email_by_id(user_id, form_data.email.lower(), db=db)
618-
updated_user = await Users.update_user_by_id(
619-
user_id,
620-
{
621-
'role': form_data.role,
622-
'name': form_data.name,
623-
'email': form_data.email.lower(),
624-
'profile_image_url': form_data.profile_image_url,
625-
},
626-
db=db,
627-
)
617+
# Build update dict from only the provided fields
618+
update_data = {}
619+
if form_data.role is not None:
620+
update_data['role'] = form_data.role
621+
if form_data.name is not None:
622+
update_data['name'] = form_data.name
623+
if form_data.email is not None:
624+
update_data['email'] = form_data.email.lower()
625+
await Auths.update_email_by_id(user_id, form_data.email.lower(), db=db)
626+
if form_data.profile_image_url is not None:
627+
update_data['profile_image_url'] = form_data.profile_image_url
628+
629+
if update_data:
630+
updated_user = await Users.update_user_by_id(
631+
user_id,
632+
update_data,
633+
db=db,
634+
)
635+
else:
636+
updated_user = user
628637

629638
if updated_user:
630639
# If the role changed, disconnect all socket sessions so stale

0 commit comments

Comments
 (0)