TS-ResHub/accounts/models.py

44 lines
1.2 KiB
Python

from django.contrib.auth.models import AbstractUser
from django.db import models
from websites.models import Website
class User(AbstractUser):
ROLE_CHOICES = [
('admin', '管理员'),
('manager', '分管理'),
('user', '普通用户'),
]
role = models.CharField(max_length=20, choices=ROLE_CHOICES, default='user', help_text="用户角色")
managed_websites = models.ManyToManyField(
Website,
blank=True,
related_name="managers",
help_text="分管理可管理的网站"
)
authorized_websites = models.ManyToManyField(
Website,
blank=True,
related_name="authorized_users",
help_text="普通用户被授权可访问的网站"
)
source_manager = models.ForeignKey(
"self",
null=True,
blank=True,
on_delete=models.SET_NULL,
related_name="brought_users",
limit_choices_to={"role": "manager"},
verbose_name="所属分管理"
)
def is_admin(self):
return self.role == 'admin'
def is_manager(self):
return self.role == 'manager'
def is_user(self):
return self.role == 'user'
def __str__(self):
return f"{self.username} ({self.get_role_display()})"