修改账户系统以及部分用户权限写法
增加部分测试和注释,完善国际化
This commit is contained in:
@@ -4,6 +4,31 @@ from django.contrib.auth.models import AbstractBaseUser
|
||||
|
||||
from jsonfield import JSONField
|
||||
|
||||
# TODO remove these
|
||||
REGULAR_USER = 0
|
||||
ADMIN = 1
|
||||
SUPER_ADMIN = 2
|
||||
|
||||
|
||||
class AdminType(object):
|
||||
REGULAR_USER = 0
|
||||
ADMIN = 1
|
||||
SUPER_ADMIN = 2
|
||||
|
||||
|
||||
class ProblemSolutionStatus(object):
|
||||
ACCEPTED = 1
|
||||
PENDING = 2
|
||||
|
||||
|
||||
class AdminExtraPermission(object):
|
||||
CREATE_PUBLIC_CONTEST = 1
|
||||
MANAGE_ALL_CONTEST = 2
|
||||
# 3 and 4 are mutually exclusive
|
||||
MANAGE_ALL_PROBLEM = 3
|
||||
# Manage public problem user created
|
||||
MANAGE_OWN_PROBLEM = 4
|
||||
|
||||
|
||||
class UserManager(models.Manager):
|
||||
use_in_migrations = True
|
||||
@@ -12,37 +37,28 @@ class UserManager(models.Manager):
|
||||
return self.get(**{self.model.USERNAME_FIELD: username})
|
||||
|
||||
|
||||
REGULAR_USER = 0
|
||||
ADMIN = 1
|
||||
SUPER_ADMIN = 2
|
||||
|
||||
|
||||
class User(AbstractBaseUser):
|
||||
# 用户名
|
||||
username = models.CharField(max_length=30, unique=True)
|
||||
# 真实姓名
|
||||
real_name = models.CharField(max_length=30, blank=True, null=True)
|
||||
# 用户邮箱
|
||||
email = models.EmailField(max_length=254, blank=True, null=True)
|
||||
# 用户注册时间
|
||||
create_time = models.DateTimeField(auto_now_add=True, null=True)
|
||||
# 0代表不是管理员 1是普通管理员 2是超级管理员
|
||||
# One of UserType
|
||||
admin_type = models.IntegerField(default=0)
|
||||
# JSON字典用来表示该用户的问题的解决状态 1为ac,2为正在进行
|
||||
# List of items in AdminExtraPermission
|
||||
admin_extra_permission = JSONField(default=[])
|
||||
# Store user problem solution status with json string format
|
||||
# {"problems": {1: ProblemSolutionStatus.ACCEPTED}, "contest_problems": {20: ProblemSolutionStatus.PENDING)}
|
||||
problems_status = JSONField(default={})
|
||||
# 找回密码用的token
|
||||
reset_password_token = models.CharField(max_length=40, blank=True, null=True)
|
||||
# token 生成时间
|
||||
reset_password_token_create_time = models.DateTimeField(blank=True, null=True)
|
||||
# SSO授权token
|
||||
# SSO auth token
|
||||
auth_token = models.CharField(max_length=40, blank=True, null=True)
|
||||
# 是否开启两步验证
|
||||
two_factor_auth = models.BooleanField(default=False)
|
||||
tfa_token = models.CharField(max_length=40, blank=True, null=True)
|
||||
# open api key
|
||||
openapi_appkey = models.CharField(max_length=35, blank=True, null=True)
|
||||
# 是否禁用用户
|
||||
is_forbidden = models.BooleanField(default=False)
|
||||
open_api = models.BooleanField(default=False)
|
||||
open_api_appkey = models.CharField(max_length=35, blank=True, null=True)
|
||||
is_disabled = models.BooleanField(default=False)
|
||||
|
||||
USERNAME_FIELD = 'username'
|
||||
REQUIRED_FIELDS = []
|
||||
@@ -68,23 +84,21 @@ class UserProfile(models.Model):
|
||||
codeforces_username = models.CharField(max_length=30, blank=True, null=True)
|
||||
accepted_problem_number = models.IntegerField(default=0)
|
||||
submission_number = models.IntegerField(default=0)
|
||||
# JSON字典用来表示该用户的问题的解决状态 1为ac,2为正在进行
|
||||
problems_status = JSONField(default={})
|
||||
phone_number = models.CharField(max_length=15, blank=True, null=True)
|
||||
school = models.CharField(max_length=200, blank=True, null=True)
|
||||
student_id = models.CharField(max_length=15, blank=True, null=True)
|
||||
|
||||
def add_accepted_problem_number(self):
|
||||
self.accepted_problem_number += 1
|
||||
self.save(update_fields=["accepted_problem_number"])
|
||||
self.accepted_problem_number = models.F("accepted_problem_number") + 1
|
||||
self.save()
|
||||
|
||||
def add_submission_number(self):
|
||||
self.submission_number += 1
|
||||
self.save(update_fields=["submission_number"])
|
||||
self.submission_number = models.F("submission_number") + 1
|
||||
self.save()
|
||||
|
||||
def minus_accepted_problem_number(self):
|
||||
self.accepted_problem_number -= 1
|
||||
self.save(update_fields=["accepted_problem_number"])
|
||||
self.accepted_problem_number = models.F("accepted_problem_number") - 1
|
||||
self.save()
|
||||
|
||||
class Meta:
|
||||
db_table = "user_profile"
|
||||
|
||||
Reference in New Issue
Block a user