mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-07-18 09:06:06 +00:00
48 lines
1.6 KiB
Python
48 lines
1.6 KiB
Python
# apps/accounts/models.py
|
|
from django.db import models
|
|
from django.contrib.auth.models import AbstractUser, Permission, UserManager
|
|
|
|
|
|
class CustomUserManager(UserManager):
|
|
def create_superuser(self, username, email=None, password=None, **extra_fields):
|
|
extra_fields.setdefault('user_level', 10)
|
|
return super().create_superuser(username, email, password, **extra_fields)
|
|
|
|
|
|
class User(AbstractUser):
|
|
objects = CustomUserManager()
|
|
"""
|
|
Custom user model for Dispatcharr.
|
|
Inherits from Django's AbstractUser to add additional fields if needed.
|
|
"""
|
|
|
|
class UserLevel(models.IntegerChoices):
|
|
STREAMER = 0, "Streamer"
|
|
STANDARD = 1, "Standard User"
|
|
ADMIN = 10, "Admin"
|
|
|
|
avatar_config = models.JSONField(default=dict, blank=True, null=True)
|
|
channel_profiles = models.ManyToManyField(
|
|
"dispatcharr_channels.ChannelProfile",
|
|
blank=True,
|
|
related_name="users",
|
|
)
|
|
user_level = models.IntegerField(default=UserLevel.STREAMER)
|
|
custom_properties = models.JSONField(default=dict, blank=True, null=True)
|
|
api_key = models.CharField(max_length=200, blank=True, null=True, db_index=True)
|
|
stream_limit = models.IntegerField(default=0)
|
|
|
|
def __str__(self):
|
|
return self.username
|
|
|
|
def get_groups(self):
|
|
"""
|
|
Returns the groups (roles) the user belongs to.
|
|
"""
|
|
return self.groups.all()
|
|
|
|
def get_permissions(self):
|
|
"""
|
|
Returns the permissions assigned to the user and their groups.
|
|
"""
|
|
return self.user_permissions.all() | Permission.objects.filter(group__user=self)
|