models.py 4.6 KB

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