models.py 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137
  1. #coding=utf-8
  2. from django.db import models
  3. from django.contrib.auth.models import AbstractBaseUser, BaseUserManager, Group, PermissionsMixin
  4. from django.utils import timezone
  5. from utils.exceptions import CustomError
  6. from apps.foundation.consts import CONTENT_TYPE_SORTING, MENU_TO_MODEL
  7. from apps.foundation.models import BizLog
  8. class UserManager(BaseUserManager):
  9. def sort_perms(self, perms):
  10. def get_index(app_label, model):
  11. try:
  12. return CONTENT_TYPE_SORTING.index('{}-{}'.format(app_label, model))
  13. except:
  14. return 9999
  15. perms = perms.order_by('content_type__model', 'id')
  16. perms = sorted(perms, key=lambda n: get_index(n.content_type.app_label, n.content_type.model))
  17. return perms
  18. def get_menuname_of_contenttype(self, app_label, model):
  19. for menu in MENU_TO_MODEL:
  20. val = '{}-{}'.format(app_label, model)
  21. if val in menu[1]:
  22. return menu[0]
  23. return u'未分类'
  24. def save_group(self, id, name, permissions, user):
  25. name = name.strip(u' ')
  26. #old_permissions = None
  27. if id == None or id == '':
  28. is_exist = Group.objects.filter(name=name).first()
  29. if is_exist:
  30. raise CustomError(u'名称为[%s]的权限组已存在' % name)
  31. group = Group.objects.create(name=name)
  32. BizLog.objects.addnew(user, BizLog.INSERT, u"添加权限组[%s],id=%d" % (group.name, group.id))
  33. else:
  34. is_exist = Group.objects.filter(name=name).exclude(pk=id).first()
  35. if is_exist:
  36. raise CustomError(u'名称为[%s]的权限组已存在' % name)
  37. group = Group.objects.filter(pk=id).first()
  38. if not group:
  39. raise CustomError(u'未找到相应的权限组')
  40. group.name = name
  41. group.save()
  42. # old_permissions = [p.id for p in group.permissions.all()]
  43. BizLog.objects.addnew(user, BizLog.UPDATE, u"修改权限组[%s],id=%d" % (group.name, group.id))
  44. group.permissions = permissions
  45. def _create_user(self, type, username, password, **extra_fields):
  46. """
  47. Creates and saves a User with the given username, email and password.
  48. """
  49. if not username:
  50. raise ValueError('The given username must be set')
  51. username = self.model.normalize_username(username)
  52. user = self.model(username=username, **extra_fields)
  53. user.set_password(password)
  54. user.type = type
  55. user.name = username
  56. user.save(using=self._db)
  57. return user
  58. def create_superuser(self, username, password, **extra_fields):
  59. extra_fields.setdefault('is_superuser', True)
  60. if extra_fields.get('is_superuser') is not True:
  61. raise ValueError('Superuser must have is_superuser=True.')
  62. return self._create_user(User.ADMINSTRATOR, username, password, **extra_fields)
  63. def create_customer(self, username, password=None, **extra_fields):
  64. return self._create_user(User.CUSTOMER, username, password, **extra_fields)
  65. class User(AbstractBaseUser, PermissionsMixin):
  66. ADMINSTRATOR = 1
  67. CUSTOMER = 2
  68. DIMISSION = 0
  69. INSERVICE = 1
  70. STATUS_CHOICES = (
  71. (DIMISSION, u'离职'),
  72. (INSERVICE, u'在职'),
  73. )
  74. type = models.PositiveSmallIntegerField(verbose_name=u"类型", editable=False, default=ADMINSTRATOR)
  75. name = models.CharField(max_length=20, verbose_name=u"姓名")
  76. username = models.CharField(max_length=30, verbose_name=u'账号', unique=True, db_index=True,error_messages={'unique': u'已存在'})
  77. status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u"是否在职", default=INSERVICE)
  78. tel = models.CharField(max_length=15, verbose_name=u"手机号码", null=True, blank=True)
  79. address = models.CharField(max_length=500, verbose_name=u"家庭住址", null=True, blank=True)
  80. title = models.CharField(max_length=20, verbose_name=u"工作岗位", null=True, blank=True)
  81. date_joined = models.DateTimeField(verbose_name=u'注册时间', default=timezone.now, null=True)
  82. objects = UserManager()
  83. USERNAME_FIELD = 'username'
  84. REQUIRED_FIELDS = []
  85. @staticmethod
  86. def getById(id):
  87. try:
  88. id = int(id)
  89. except:
  90. raise CustomError(u'无效的员工ID')
  91. instance = User.objects.filter(pk=id).first()
  92. if not instance:
  93. raise CustomError(u'未找到相应的员工')
  94. return instance
  95. def __str__(self):
  96. return self.username
  97. def __unicode__(self):
  98. return self.username
  99. def is_customer(self):
  100. if self.type & self.CUSTOMER:
  101. return True
  102. return False
  103. class Meta:
  104. db_table = "auth_user"
  105. verbose_name = u"人员管理"
  106. ordering = ('-id',)
  107. default_permissions = ()
  108. permissions = [
  109. ('browse_group', u'查看'),
  110. ('add_group', u'添加'),
  111. ('edit_group', u'修改'),
  112. ('delete_group', u'删除'),
  113. ]