27 lines
781 B
Python
27 lines
781 B
Python
"""用户资料服务。"""
|
|
|
|
from django.contrib.auth import get_user_model
|
|
from django.db import transaction
|
|
|
|
from .models import UserProfile
|
|
|
|
|
|
@transaction.atomic
|
|
def get_or_create_profile(user) -> UserProfile:
|
|
"""显式建立用户资料,避免依赖难以追踪的模型信号。"""
|
|
|
|
profile, _ = UserProfile.objects.get_or_create(user=user)
|
|
return profile
|
|
|
|
|
|
@transaction.atomic
|
|
def deactivate_user(actor, target_user_id: int):
|
|
"""仅允许管理员停用账户;保留关联审计记录。"""
|
|
|
|
if not actor.is_staff:
|
|
raise PermissionError("只有管理员可以停用用户。")
|
|
user = get_user_model().objects.select_for_update().get(pk=target_user_id)
|
|
user.is_active = False
|
|
user.save(update_fields=("is_active",))
|
|
return user
|