613c99dce2
also provided tests
45 lines
1.2 KiB
Python
45 lines
1.2 KiB
Python
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
|