from django.contrib.auth.models import AbstractUser from django.db import models from django.utils.translation import gettext_lazy as _ from apps.core.models import BaseModel class UserRole(models.TextChoices): ADMIN = "admin", _("Admin") EXPERIMENTER = "experimenter", _("Experimenter") APPROVER = "approver", _("Approver") VIEWER = "viewer", _("Viewer") class User(AbstractUser, BaseModel): role = models.CharField( max_length=20, choices=UserRole.choices, default=UserRole.VIEWER, db_index=True, verbose_name=_("role"), help_text=_("Platform role that defines user permissions"), ) class Meta: swappable = "AUTH_USER_MODEL" verbose_name = _("user") verbose_name_plural = _("users") @property def is_admin_role(self) -> bool: return self.role == UserRole.ADMIN @property def is_experimenter(self) -> bool: return self.role == UserRole.EXPERIMENTER @property def is_approver(self) -> bool: return self.role == UserRole.APPROVER @property def is_viewer(self) -> bool: return self.role == UserRole.VIEWER