修改账户系统以及部分用户权限写法

增加部分测试和注释,完善国际化
This commit is contained in:
virusdefender
2016-06-23 12:19:16 +08:00
parent 61fe5675e0
commit eb02a00859
13 changed files with 555 additions and 204 deletions

View File

@@ -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为ac2为正在进行
# 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为ac2为正在进行
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"