61 lines
2.7 KiB
Python
61 lines
2.7 KiB
Python
from uuid import uuid4
|
|
|
|
from django.contrib.auth.models import UserManager, AbstractUser
|
|
from django.core.cache import cache
|
|
from django.db.models import IntegerField, ForeignKey, CharField, TextField, ManyToManyField, CASCADE
|
|
|
|
from ...op_drf.models import CoreModel
|
|
|
|
|
|
class UserProfile(AbstractUser, CoreModel):
|
|
USER_TYPE_CHOICES = (
|
|
(0, "后台用户"),
|
|
(1, "前台用户"),
|
|
)
|
|
objects = UserManager()
|
|
username = CharField(max_length=150, unique=True, db_index=True, verbose_name='用户账号')
|
|
secret = CharField(max_length=255, default=uuid4, verbose_name='加密秘钥')
|
|
email = CharField(max_length=255, verbose_name="邮箱", null=True, blank=True)
|
|
mobile = CharField(max_length=255, verbose_name="电话", null=True, blank=True)
|
|
avatar = TextField(verbose_name="头像", null=True, blank=True)
|
|
name = CharField(max_length=40, verbose_name="姓名")
|
|
gender = CharField(max_length=8, verbose_name="性别", null=True, blank=True)
|
|
remark = TextField(verbose_name="备注", null=True)
|
|
user_type = IntegerField(default=0, verbose_name="用户类型")
|
|
post = ManyToManyField(to='Post', verbose_name='关联岗位', db_constraint=False)
|
|
role = ManyToManyField(to='Role', verbose_name='关联角色', db_constraint=False)
|
|
dept = ForeignKey(to='Dept', verbose_name='归属部门', on_delete=CASCADE, db_constraint=False, null=True, blank=True)
|
|
|
|
@property
|
|
def get_user_interface_dict(self):
|
|
interface_dict = cache.get(f'permission_interface_dict{self.username}', {})
|
|
if not interface_dict:
|
|
for ele in self.role.filter(status='1', menu__status='1').values('menu__interface_path',
|
|
'menu__interface_method').distinct():
|
|
interface_path = ele.get('menu__interface_path')
|
|
if interface_path is None or interface_path == '':
|
|
continue
|
|
if ele.get('menu__interface_method') in interface_dict:
|
|
interface_dict[ele.get('menu__interface_method', '')].append(interface_path)
|
|
else:
|
|
interface_dict[ele.get('menu__interface_method', '')] = [interface_path]
|
|
cache.set(f'permission_interface_dict_{self.username}', interface_dict, 84600)
|
|
return interface_dict
|
|
|
|
@property
|
|
def delete_cache(self):
|
|
"""
|
|
清空缓存中的接口列表
|
|
:return:
|
|
"""
|
|
return cache.delete(f'permission_interface_dict_{self.username}')
|
|
|
|
class Meta:
|
|
verbose_name = '用户管理'
|
|
verbose_name_plural = verbose_name
|
|
|
|
def __str__(self):
|
|
if self.name:
|
|
return f"{self.username}({self.name})"
|
|
return f"{self.username}"
|