models.py 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. # coding=utf-8
  2. from django.db import models
  3. from django.contrib.auth.models import AbstractBaseUser, PermissionsMixin, BaseUserManager, Group
  4. from django.utils import timezone
  5. from rest_framework.utils import model_meta
  6. from utils.exceptions import CustomError
  7. from apps.tenant.models import Tenant
  8. class UserManager(BaseUserManager):
  9. def create_administrator(self, username, password=None, **extra_fields):
  10. return self.create_user(User.ADMINSTRATOR, username, password, **extra_fields)
  11. def create_tenant(self, username, password=None, **extra_fields):
  12. return self.create_user(User.TENANT, username, password, **extra_fields)
  13. def create_superuser_tenant(self, username, password=None, **extra_fields):
  14. u = self.create_tenant(username, password, **extra_fields)
  15. u.is_active = True
  16. u.is_superuser = True
  17. u.save(using=self._db)
  18. return u
  19. def create_customer(self, username, password=None, **extra_fields):
  20. return self.create_user(User.CUSTOMER, username, password, **extra_fields)
  21. def create_superuser(self, username, password, **extra_fields):
  22. u = self.create_administrator(username, password, **extra_fields)
  23. u.is_active = True
  24. u.is_superuser = True
  25. u.save(using=self._db)
  26. return u
  27. def create_user(self, type, username, password=None, **extra_fields):
  28. if not username:
  29. raise CustomError(u'请输入账号!')
  30. count = User.objects.filter(username=username).count()
  31. if count > 0:
  32. raise CustomError(u'该账号已存在!')
  33. user = self.model(
  34. type=type,
  35. username=username,
  36. is_superuser=False,
  37. last_login=timezone.now(),
  38. **extra_fields
  39. )
  40. user.set_password(password)
  41. user.save(using=self._db)
  42. return user
  43. class User(AbstractBaseUser, PermissionsMixin):
  44. ADMINSTRATOR = 1 #管理员
  45. TENANT = 2 #租户
  46. CUSTOMER = 3 #游客
  47. type = models.PositiveSmallIntegerField(verbose_name=u"类型", editable=False)
  48. username = models.CharField(verbose_name=u'帐号', max_length=30, unique=True, db_index=True)
  49. is_active = models.BooleanField(verbose_name=u'激活', default=True)
  50. date_joined = models.DateTimeField(verbose_name=u'注册时间', default=timezone.now, editable=False)
  51. objects = UserManager()
  52. USERNAME_FIELD = 'username'
  53. REQUIRED_FIELDS = []
  54. class Meta:
  55. db_table = "auth_user"
  56. verbose_name = u"权限管理"
  57. unique_together = [
  58. ('username')
  59. ]
  60. index_together = (
  61. 'date_joined',
  62. )
  63. ordering = ['-id']
  64. default_permissions = ()
  65. permissions = [
  66. ('browse_group', u'查看'),
  67. ('add_group', u'添加'),
  68. ('delete_group', u'删除'),
  69. ]
  70. def __unicode__(self):
  71. return self.username
  72. def addAdministrator(self):
  73. self.type = self.type | self.ADMINSTRATOR
  74. def addTenant(self):
  75. self.type = self.type | self.TENANT
  76. def addCustomer(self):
  77. self.type = self.type | self.CUSTOMER
  78. def is_customer(self):
  79. if self.type == self.CUSTOMER:
  80. return True
  81. return False
  82. def is_tenant(self):
  83. if self.type == self.TENANT:
  84. return True
  85. return False
  86. def is_administrator(self):
  87. if self.type == self.ADMINSTRATOR:
  88. return True
  89. return False
  90. def change_password(self, new_password, confirm_password, old_password):
  91. if new_password != confirm_password:
  92. raise CustomError(u'两次输入的密码不一致, 请检查')
  93. if not self.check_password(old_password):
  94. raise CustomError(u'原密码输入错误, 请检查')
  95. self.set_password(new_password)
  96. def update_item(self, validated_data):
  97. def update():
  98. info = model_meta.get_field_info(self)
  99. for attr, value in validated_data.items():
  100. if attr in info.relations and info.relations[attr].to_many:
  101. field = getattr(self, attr)
  102. field.set(value)
  103. else:
  104. setattr(self, attr, value)
  105. if not 'username' in validated_data:
  106. raise CustomError(u'账号不能为空!')
  107. count = User.objects.filter(username=validated_data['username']).exclude(id=self.id).count()
  108. if count > 0:
  109. raise CustomError(u'该账号已存在!')
  110. if not 'password' in validated_data or not validated_data['password']:
  111. validated_data['password'] = self.password
  112. update()
  113. else:
  114. update()
  115. self.set_password(validated_data['password'])
  116. self.save()
  117. return self
  118. Group.add_to_class('display_name', models.CharField(verbose_name=u'名称显示', max_length=80))
  119. Group.add_to_class('tenant', models.ForeignKey(Tenant, verbose_name=u'租户', on_delete=models.PROTECT, editable=False))
  120. Group.add_to_class('create_user', models.ForeignKey(User, verbose_name=u"创建人", on_delete=models.PROTECT, editable=False))