Source code for ferrosoft.apps.ferrobase.services.user_mgm

#  Copyright (c) 2024 Ferrosoft GmbH. All rights reserved.
from dataclasses import dataclass, field
from typing import List

from ferrosoft.apps.ferrobase.auth.roles import Role
from ferrosoft.apps.ferrobase.models import User, Organization


[docs] @dataclass class UserOptions: """Parameters for :func:`add_user`. ``password`` may be ``None`` for SSO-only users; ``roles`` defaults to an empty list when no role assignment is required. """ username: str email: str first_name: str last_name: str organization: Organization password: str | None = None roles: List[Role] = field(default_factory=list)
[docs] def add_user(options: UserOptions) -> User: """Create a :class:`User` and optionally assign the configured roles. Wraps :meth:`User.objects.create_user` (so passwords are hashed by Django) and then delegates to ``user.assign_roles`` when any roles are listed. """ user = User.objects.create_user( options.username, options.email, options.password, first_name=options.first_name, last_name=options.last_name, organization=options.organization, ) if len(options.roles) > 0: user.assign_roles(*options.roles) return user