models.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153
  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.SUPER, username, password, **extra_fields)
  11. def create_tenant_user(self,type, username, password=None, **extra_fields):
  12. return self.create_user(type, username, password, **extra_fields)
  13. def create_superuser_tenant(self, username, password=None, **extra_fields):
  14. u = self.create_administrator(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.EMPLOYEE, 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. SUPER = 1
  45. ADMIN = 2
  46. EMPLOYEE = 3
  47. REPAIR = 4
  48. TYPE_CHOICES = (
  49. (SUPER, u'平台管理员'),
  50. (ADMIN, u'管理者'),
  51. (EMPLOYEE, u'检修人'),
  52. (REPAIR, u'报修人'),
  53. )
  54. type = models.PositiveSmallIntegerField(verbose_name=u"类型",choices=TYPE_CHOICES, editable=False)
  55. username = models.CharField(verbose_name=u'帐号', max_length=30, unique=True, db_index=True)
  56. is_active = models.BooleanField(verbose_name=u'激活', default=True)
  57. date_joined = models.DateTimeField(verbose_name=u'注册时间', default=timezone.now, editable=False)
  58. objects = UserManager()
  59. USERNAME_FIELD = 'username'
  60. REQUIRED_FIELDS = []
  61. class Meta:
  62. db_table = "auth_user"
  63. verbose_name = u"权限管理"
  64. unique_together = [
  65. ('username')
  66. ]
  67. index_together = (
  68. 'date_joined',
  69. )
  70. ordering = ['-id']
  71. default_permissions = ()
  72. permissions = [
  73. ('browse_group', u'查看'),
  74. ('add_group', u'添加'),
  75. ('delete_group', u'删除'),
  76. ]
  77. def __unicode__(self):
  78. return self.username
  79. def is_employee(self):
  80. if self.type == self.EMPLOYEE:
  81. return True
  82. return False
  83. def is_repair(self):
  84. if self.type == self.REPAIR:
  85. return True
  86. return False
  87. def is_admin(self):
  88. if self.type == self.ADMIN or self.type == self.SUPER:
  89. return True
  90. return False
  91. def is_administrator(self):
  92. if self.type == self.SUPER:
  93. return True
  94. return False
  95. def get_name(self):
  96. return self.employee.name
  97. def change_password(self, new_password, confirm_password, old_password):
  98. if new_password != confirm_password:
  99. raise CustomError(u'两次输入的密码不一致, 请检查')
  100. if not self.check_password(old_password):
  101. raise CustomError(u'原密码输入错误, 请检查')
  102. self.set_password(new_password)
  103. def update_item(self, validated_data):
  104. def update():
  105. info = model_meta.get_field_info(self)
  106. for attr, value in validated_data.items():
  107. if attr in info.relations and info.relations[attr].to_many:
  108. field = getattr(self, attr)
  109. field.set(value)
  110. else:
  111. setattr(self, attr, value)
  112. if not 'username' in validated_data:
  113. raise CustomError(u'账号不能为空!')
  114. count = User.objects.filter(username=validated_data['username']).exclude(id=self.id).count()
  115. if count > 0:
  116. raise CustomError(u'该账号已存在!')
  117. if not 'password' in validated_data or not validated_data['password']:
  118. validated_data['password'] = self.password
  119. update()
  120. else:
  121. update()
  122. self.set_password(validated_data['password'])
  123. self.save()
  124. return self
  125. Group.add_to_class('display_name', models.CharField(verbose_name=u'名称显示', max_length=80))
  126. Group.add_to_class('tenant', models.ForeignKey(Tenant, verbose_name=u'企业', on_delete=models.PROTECT, editable=False))
  127. Group.add_to_class('create_user', models.ForeignKey(User, verbose_name=u"创建人", on_delete=models.PROTECT, editable=False))