Files

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