回退了更多阶段的修改
This commit is contained in:
@@ -172,16 +172,11 @@ class UserManager(BaseUserManager):
|
||||
|
||||
# === 用户表 ===
|
||||
class User(QModel):
|
||||
"""用户表——系统核心身份模型
|
||||
|
||||
去远程化后存储在本地数据库,作为 AUTH_USER_MODEL。
|
||||
在 SAAS 主库字段基础上增加本地业务字段(YonghuID/UserAvatar/UserType)。
|
||||
敏感数据(OpenID/支付信息)存放在 users.UserSensitiveData 表。
|
||||
"""
|
||||
"""用户表——系统核心身份模型(映射 SAAS 主库 User 表)"""
|
||||
|
||||
UserUUID = UUIDField(primary_key=True, db_column='UserUUID', verbose_name='用户UUID')
|
||||
UserName = models.CharField(max_length=256, unique=True, db_column='UserName', verbose_name='用户名')
|
||||
UserPassword = models.CharField(max_length=200, default='', db_column='UserPassword', verbose_name='密码')
|
||||
UserPassword = models.CharField(max_length=60, default='', db_column='UserPassword', verbose_name='密码')
|
||||
UserPositionStatus = models.SmallIntegerField(default=0, db_column='UserPositionStatus', verbose_name='职位状态')
|
||||
UserPersonalSignature = models.CharField(max_length=1024, default='', db_column='UserPersonalSignature', verbose_name='个人签名')
|
||||
UserEmail = models.CharField(max_length=256, default='', db_column='UserEmail', verbose_name='邮箱')
|
||||
@@ -194,261 +189,17 @@ class User(QModel):
|
||||
IsStaff = models.BooleanField(default=False, db_column='IsStaff', verbose_name='是否员工')
|
||||
IsSuperuser = models.BooleanField(default=False, db_column='IsSuperuser', verbose_name='是否超级用户')
|
||||
|
||||
# === 本地业务字段(去远程化新增) ===
|
||||
YonghuID = models.CharField(max_length=7, unique=True, null=True, blank=True, db_index=True, db_column='YonghuID', verbose_name='用户业务ID')
|
||||
UserAvatar = models.CharField(max_length=500, null=True, blank=True, default='a_long/morentouxiang.jpg', db_column='UserAvatar', verbose_name='头像')
|
||||
UserType = models.CharField(
|
||||
max_length=10,
|
||||
choices=[
|
||||
('normal', '普通用户'),
|
||||
('dashou', '打手'),
|
||||
('shop', '商家'),
|
||||
('guanshi', '管事'),
|
||||
('admin', '管理员'),
|
||||
('kefu', '客服'),
|
||||
],
|
||||
default='normal', db_column='UserType', verbose_name='用户类型'
|
||||
)
|
||||
|
||||
objects = UserManager()
|
||||
|
||||
# Django auth 框架要求
|
||||
USERNAME_FIELD = 'YonghuID'
|
||||
REQUIRED_FIELDS = ['UserName']
|
||||
|
||||
class Meta:
|
||||
managed = True
|
||||
managed = False
|
||||
app_label = 'gvsdsdk'
|
||||
db_table = 'User'
|
||||
verbose_name = '用户'
|
||||
verbose_name_plural = '用户'
|
||||
|
||||
def __str__(self):
|
||||
return self.YonghuID or self.UserName
|
||||
|
||||
# === 兼容属性(snake_case → PascalCase 映射,保持现有代码兼容) ===
|
||||
|
||||
@property
|
||||
def yonghuid(self):
|
||||
"""兼容 UserMain.yonghuid"""
|
||||
return self.YonghuID
|
||||
|
||||
@yonghuid.setter
|
||||
def yonghuid(self, value):
|
||||
self.YonghuID = value
|
||||
|
||||
@property
|
||||
def avatar(self):
|
||||
"""兼容 UserMain.avatar"""
|
||||
return self.UserAvatar
|
||||
|
||||
@avatar.setter
|
||||
def avatar(self, value):
|
||||
self.UserAvatar = value
|
||||
|
||||
@property
|
||||
def user_type(self):
|
||||
"""兼容 UserMain.user_type"""
|
||||
return self.UserType
|
||||
|
||||
@user_type.setter
|
||||
def user_type(self, value):
|
||||
self.UserType = value
|
||||
|
||||
@property
|
||||
def phone(self):
|
||||
"""兼容 UserMain.phone"""
|
||||
return self.UserTele
|
||||
|
||||
@phone.setter
|
||||
def phone(self, value):
|
||||
self.UserTele = value
|
||||
|
||||
@property
|
||||
def openid(self):
|
||||
"""兼容 UserMain.openid —— 从 UserSensitiveData 延迟加载"""
|
||||
if hasattr(self, '_openid_cache'):
|
||||
return self._openid_cache
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
self._openid_cache = sd.OpenID if sd else None
|
||||
except Exception:
|
||||
self._openid_cache = None
|
||||
return self._openid_cache
|
||||
|
||||
@openid.setter
|
||||
def openid(self, value):
|
||||
"""设置 openid —— 写入 UserSensitiveData"""
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'OpenID': value or ''}
|
||||
)
|
||||
if not created:
|
||||
sd.OpenID = value or ''
|
||||
sd.save(update_fields=['OpenID'])
|
||||
self._openid_cache = value
|
||||
|
||||
@property
|
||||
def unionid(self):
|
||||
"""兼容 UserMain.unionid"""
|
||||
if hasattr(self, '_unionid_cache'):
|
||||
return self._unionid_cache
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
self._unionid_cache = sd.UnionID if sd else None
|
||||
except Exception:
|
||||
self._unionid_cache = None
|
||||
return self._unionid_cache
|
||||
|
||||
@unionid.setter
|
||||
def unionid(self, value):
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'UnionID': value or ''}
|
||||
)
|
||||
if not created:
|
||||
sd.UnionID = value or ''
|
||||
sd.save(update_fields=['UnionID'])
|
||||
|
||||
@property
|
||||
def password(self):
|
||||
"""兼容 UserMain.password —— 从 UserSensitiveData 加载"""
|
||||
if hasattr(self, '_password_cache'):
|
||||
return self._password_cache
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
self._password_cache = sd.Password if sd else ''
|
||||
except Exception:
|
||||
self._password_cache = ''
|
||||
return self._password_cache
|
||||
|
||||
@password.setter
|
||||
def password(self, value):
|
||||
"""设置 password —— 写入 UserSensitiveData"""
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'Password': value or ''}
|
||||
)
|
||||
if not created:
|
||||
sd.Password = value or ''
|
||||
sd.save(update_fields=['Password'])
|
||||
self._password_cache = value
|
||||
|
||||
@property
|
||||
def zhifu(self):
|
||||
"""兼容 UserMain.zhifu"""
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
return sd.Zhifu if sd else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
@zhifu.setter
|
||||
def zhifu(self, value):
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'Zhifu': value or ''}
|
||||
)
|
||||
if not created:
|
||||
sd.Zhifu = value or ''
|
||||
sd.save(update_fields=['Zhifu'])
|
||||
|
||||
@property
|
||||
def skzhanghao(self):
|
||||
"""兼容 UserMain.skzhanghao"""
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
return sd.SKZhanghao if sd else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
@skzhanghao.setter
|
||||
def skzhanghao(self, value):
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'SKZhanghao': value or ''}
|
||||
)
|
||||
if not created:
|
||||
sd.SKZhanghao = value or ''
|
||||
sd.save(update_fields=['SKZhanghao'])
|
||||
|
||||
@property
|
||||
def ip(self):
|
||||
"""兼容 UserMain.ip"""
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
return sd.IP if sd else None
|
||||
except Exception:
|
||||
return None
|
||||
|
||||
@ip.setter
|
||||
def ip(self, value):
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'IP': value or ''}
|
||||
)
|
||||
if not created:
|
||||
sd.IP = value or ''
|
||||
sd.save(update_fields=['IP'])
|
||||
|
||||
@property
|
||||
def shoujihao_renzheng(self):
|
||||
"""兼容 UserMain.shoujihao_renzheng"""
|
||||
try:
|
||||
from users.models import UserSensitiveData
|
||||
sd = UserSensitiveData.objects.filter(UserUUID=self.UserUUID).first()
|
||||
return sd.PhoneVerified if sd else False
|
||||
except Exception:
|
||||
return False
|
||||
|
||||
@shoujihao_renzheng.setter
|
||||
def shoujihao_renzheng(self, value):
|
||||
from users.models import UserSensitiveData
|
||||
sd, created = UserSensitiveData.objects.get_or_create(
|
||||
UserUUID=self.UserUUID,
|
||||
defaults={'PhoneVerified': value}
|
||||
)
|
||||
if not created:
|
||||
sd.PhoneVerified = value
|
||||
sd.save(update_fields=['PhoneVerified'])
|
||||
|
||||
@property
|
||||
def last_login_time(self):
|
||||
"""兼容 UserMain.last_login_time"""
|
||||
return self.UserLastLoginDate
|
||||
|
||||
@last_login_time.setter
|
||||
def last_login_time(self, value):
|
||||
self.UserLastLoginDate = value
|
||||
|
||||
@property
|
||||
def create_time(self):
|
||||
"""兼容 UserMain.create_time"""
|
||||
return self.UserCreateTime
|
||||
|
||||
@property
|
||||
def id(self):
|
||||
"""兼容 UserMain.id —— 返回 YonghuID(业务主键)"""
|
||||
return self.YonghuID
|
||||
|
||||
@property
|
||||
def pk(self):
|
||||
"""Django 内部使用 —— 返回 UserUUID"""
|
||||
return self.UserUUID
|
||||
|
||||
# === gvsdsdk 原生方法 ===
|
||||
return self.UserName
|
||||
|
||||
@property
|
||||
def UUIDStr(self):
|
||||
@@ -503,15 +254,31 @@ class User(QModel):
|
||||
"""获取电话,空则返回默认文本"""
|
||||
return self.UserTele or '未填写'
|
||||
|
||||
def GetCompanies(self):
|
||||
"""获取用户所属公司列表"""
|
||||
# Company 模型不在 gvsdsdk 中,此处返回空 QuerySet
|
||||
# 如需使用,请在子服务器中自行实现
|
||||
return []
|
||||
|
||||
def GetRoles(self):
|
||||
"""获取用户角色列表"""
|
||||
"""获取用户角色列表(需在同一 database 连接下使用)"""
|
||||
user_role_uuids = UserRole.objects.filter(
|
||||
UserUUID=self.UserUUID
|
||||
).values_list('RoleUUID', flat=True)
|
||||
return Role.objects.filter(RoleUUID__in=user_role_uuids)
|
||||
|
||||
def GetDepartments(self):
|
||||
"""获取用户部门列表"""
|
||||
# Department 模型不在 gvsdsdk 中,此处返回空列表
|
||||
# 如需使用,请在子服务器中自行实现
|
||||
return []
|
||||
|
||||
def HasPermission(self, PermCode):
|
||||
"""检查用户是否拥有指定权限"""
|
||||
"""检查用户是否拥有指定权限(需在同一 database 连接下使用)
|
||||
|
||||
通过 UserRole → RolePermission → Permission 链路查询,
|
||||
汇总所有角色的操作权限后判断。
|
||||
"""
|
||||
user_role_uuids = UserRole.objects.filter(
|
||||
UserUUID=self.UserUUID
|
||||
).values_list('RoleUUID', flat=True)
|
||||
@@ -524,7 +291,7 @@ class User(QModel):
|
||||
PermStatus=1,
|
||||
).exists()
|
||||
|
||||
# Django auth 框架兼容(蛇形命名)
|
||||
# Django auth 框架兼容(内部使用蛇形命名)
|
||||
@property
|
||||
def is_active(self):
|
||||
return self.IsActive
|
||||
@@ -537,6 +304,14 @@ class User(QModel):
|
||||
def is_authenticated(self):
|
||||
return self.IsAuthenticated
|
||||
|
||||
@property
|
||||
def pk(self):
|
||||
return self.PK
|
||||
|
||||
@property
|
||||
def id(self):
|
||||
return self.ID
|
||||
|
||||
def set_password(self, raw_password):
|
||||
self.SetPassword(raw_password)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user