266 lines
9.3 KiB
Python
266 lines
9.3 KiB
Python
import uuid
|
|
import datetime
|
|
from django.contrib.auth.models import BaseUserManager
|
|
|
|
from gvsdsdk.models import Role, UserRole, RolePermission, Permission, Shop, RoleShop, Position, PositionTemplate, PositionTemplatePermission, UserDept
|
|
|
|
|
|
class UserManager(BaseUserManager):
|
|
"""用户管理器——提供用户创建与超级用户创建。
|
|
方法名保留蛇形命名以兼容 Django 内部约定。"""
|
|
|
|
def create_user(self, username, password=None, email='', **extra_fields):
|
|
"""创建普通用户"""
|
|
if not username:
|
|
raise ValueError('The Username field must be set')
|
|
user = self.model(
|
|
UserUUID=uuid.uuid4().bytes,
|
|
UserName=username,
|
|
UserEmail=email or '',
|
|
**extra_fields
|
|
)
|
|
if password:
|
|
user.SetPassword(password)
|
|
user.save(using=self._db)
|
|
return user
|
|
|
|
def create_superuser(self, username, password=None, **extra_fields):
|
|
"""创建超级用户"""
|
|
extra_fields.setdefault('UserAccountLicense', 1)
|
|
extra_fields.setdefault('UserPositionStatus', 0)
|
|
extra_fields.setdefault('IsStaff', True)
|
|
extra_fields.setdefault('IsSuperuser', True)
|
|
return self.create_user(username, password, **extra_fields)
|
|
|
|
|
|
class RoleManager:
|
|
"""角色管理器——提供角色创建、分配、权限管理"""
|
|
|
|
@staticmethod
|
|
def CreateRole(Name, TenantUUID, AssignScope=0, AssignScopeUUID=None, RoleType=2):
|
|
"""创建角色"""
|
|
role = Role(
|
|
RoleUUID=uuid.uuid4().bytes,
|
|
TenantUUID=TenantUUID,
|
|
RoleName=Name,
|
|
RoleType=RoleType,
|
|
RoleStatus=1,
|
|
AssignScope=AssignScope,
|
|
AssignScopeUUID=AssignScopeUUID,
|
|
RoleDesc='',
|
|
CreateTime=datetime.datetime.utcnow(),
|
|
)
|
|
role.save()
|
|
return role
|
|
|
|
@staticmethod
|
|
def AssignRole(UserUUID, RoleUUID, CompanyUUID):
|
|
"""为用户分配角色"""
|
|
user_role = UserRole(
|
|
UserRoleUUID=uuid.uuid4().bytes,
|
|
UserUUID=UserUUID,
|
|
RoleUUID=RoleUUID,
|
|
CompanyUUID=CompanyUUID,
|
|
CreateTime=datetime.datetime.utcnow(),
|
|
)
|
|
user_role.save()
|
|
return user_role
|
|
|
|
@staticmethod
|
|
def RemoveRole(UserUUID, RoleUUID, CompanyUUID=None):
|
|
"""移除用户的指定角色"""
|
|
qs = UserRole.objects.filter(UserUUID=UserUUID, RoleUUID=RoleUUID)
|
|
if CompanyUUID is not None:
|
|
qs = qs.filter(CompanyUUID=CompanyUUID)
|
|
deleted, _ = qs.delete()
|
|
return deleted > 0
|
|
|
|
@staticmethod
|
|
def GetRolesForUser(UserUUID, CompanyUUID=None):
|
|
"""获取用户的角色"""
|
|
qs = UserRole.objects.filter(UserUUID=UserUUID)
|
|
if CompanyUUID is not None:
|
|
qs = qs.filter(CompanyUUID=CompanyUUID)
|
|
role_uuids = qs.values_list('RoleUUID', flat=True)
|
|
return Role.objects.filter(RoleUUID__in=role_uuids)
|
|
|
|
@staticmethod
|
|
def GetUsersForRole(RoleUUID):
|
|
"""获取拥有指定角色的所有用户"""
|
|
from gvsdsdk.models import User
|
|
user_uuids = UserRole.objects.filter(RoleUUID=RoleUUID).values_list('UserUUID', flat=True)
|
|
return User.objects.filter(UserUUID__in=user_uuids)
|
|
|
|
@staticmethod
|
|
def AssignPermission(RoleUUID, PermUUID):
|
|
"""为角色分配权限"""
|
|
rp = RolePermission(
|
|
RolePermUUID=uuid.uuid4().bytes,
|
|
RoleUUID=RoleUUID,
|
|
PermUUID=PermUUID,
|
|
CreateTime=datetime.datetime.utcnow(),
|
|
)
|
|
rp.save()
|
|
return rp
|
|
|
|
@staticmethod
|
|
def RemovePermission(RoleUUID, PermUUID):
|
|
"""移除角色的指定权限"""
|
|
deleted, _ = RolePermission.objects.filter(RoleUUID=RoleUUID, PermUUID=PermUUID).delete()
|
|
return deleted > 0
|
|
|
|
@staticmethod
|
|
def GetPermissionsForRole(RoleUUID):
|
|
"""获取角色的所有权限"""
|
|
perm_uuids = RolePermission.objects.filter(RoleUUID=RoleUUID).values_list('PermUUID', flat=True)
|
|
return Permission.objects.filter(PermUUID__in=perm_uuids, PermStatus=1)
|
|
|
|
|
|
class ShopManager:
|
|
"""商铺管理器——提供商铺创建、角色关联、查询"""
|
|
|
|
@staticmethod
|
|
def CreateShop(Name, CompanyUUID, Code='', ShopType=0, **Kwargs):
|
|
"""创建商铺"""
|
|
shop = Shop(
|
|
ShopUUID=uuid.uuid4().bytes,
|
|
CompanyUUID=CompanyUUID,
|
|
ShopName=Name,
|
|
ShopCode=Code,
|
|
ShopType=ShopType,
|
|
ShopStatus=1,
|
|
ShopAddress=Kwargs.get('ShopAddress', ''),
|
|
ShopContact=Kwargs.get('ShopContact', ''),
|
|
ShopPhone=Kwargs.get('ShopPhone', ''),
|
|
ShopDesc=Kwargs.get('ShopDesc', ''),
|
|
CreateTime=datetime.datetime.utcnow(),
|
|
UpdateTime=datetime.datetime.utcnow(),
|
|
)
|
|
shop.save()
|
|
return shop
|
|
|
|
@staticmethod
|
|
def AssignRole(RoleUUID, ShopUUID, IsMainShop=False):
|
|
"""为角色关联商铺"""
|
|
role_shop = RoleShop(
|
|
RoleShopUUID=uuid.uuid4().bytes,
|
|
RoleUUID=RoleUUID,
|
|
ShopUUID=ShopUUID,
|
|
IsMainShop=1 if IsMainShop else 0,
|
|
CreateTime=datetime.datetime.utcnow(),
|
|
)
|
|
role_shop.save()
|
|
return role_shop
|
|
|
|
@staticmethod
|
|
def RemoveRole(RoleUUID, ShopUUID):
|
|
"""移除角色与商铺的关联"""
|
|
deleted, _ = RoleShop.objects.filter(RoleUUID=RoleUUID, ShopUUID=ShopUUID).delete()
|
|
return deleted > 0
|
|
|
|
@staticmethod
|
|
def GetShopsForRole(RoleUUID):
|
|
"""获取角色关联的所有商铺"""
|
|
shop_uuids = RoleShop.objects.filter(RoleUUID=RoleUUID).values_list('ShopUUID', flat=True)
|
|
return Shop.objects.filter(ShopUUID__in=shop_uuids)
|
|
|
|
@staticmethod
|
|
def GetRolesForShop(ShopUUID):
|
|
"""获取商铺关联的所有角色"""
|
|
role_uuids = RoleShop.objects.filter(ShopUUID=ShopUUID).values_list('RoleUUID', flat=True)
|
|
return Role.objects.filter(RoleUUID__in=role_uuids)
|
|
|
|
@staticmethod
|
|
def GetMainShopForRole(RoleUUID):
|
|
"""获取角色的主商铺"""
|
|
rs = RoleShop.objects.filter(RoleUUID=RoleUUID, IsMainShop=1).first()
|
|
if rs:
|
|
return Shop.objects.filter(ShopUUID=rs.ShopUUID).first()
|
|
return None
|
|
|
|
@staticmethod
|
|
def GetShopsForCompany(CompanyUUID):
|
|
"""获取公司下的所有商铺"""
|
|
return Shop.objects.filter(CompanyUUID=CompanyUUID, ShopStatus=1)
|
|
|
|
|
|
class PositionManager:
|
|
"""职务管理器——提供人事职务标签创建、岗位模板管理"""
|
|
|
|
@staticmethod
|
|
def CreatePosition(Name, TenantUUID, Code='', Level=0, **Kwargs):
|
|
"""创建人事职务标签"""
|
|
position = Position(
|
|
PositionUUID=uuid.uuid4().bytes,
|
|
TenantUUID=TenantUUID,
|
|
PositionName=Name,
|
|
PositionCode=Code,
|
|
PositionLevel=Level,
|
|
PositionStatus=1,
|
|
PositionDesc=Kwargs.get('PositionDesc', ''),
|
|
CreateTime=datetime.datetime.utcnow(),
|
|
UpdateTime=datetime.datetime.utcnow(),
|
|
)
|
|
position.save()
|
|
return position
|
|
|
|
@staticmethod
|
|
def GetPositionsForTenant(TenantUUID):
|
|
"""获取租户下的所有职务"""
|
|
return Position.objects.filter(TenantUUID=TenantUUID, PositionStatus=1)
|
|
|
|
@staticmethod
|
|
def CreatePositionTemplate(Name, TenantUUID, Code='', **Kwargs):
|
|
"""创建岗位模板"""
|
|
template = PositionTemplate(
|
|
PositionTemplateUUID=uuid.uuid4().bytes,
|
|
TenantUUID=TenantUUID,
|
|
TemplateName=Name,
|
|
TemplateCode=Code,
|
|
TemplateStatus=1,
|
|
TemplateDesc=Kwargs.get('TemplateDesc', ''),
|
|
CreateTime=datetime.datetime.utcnow(),
|
|
UpdateTime=datetime.datetime.utcnow(),
|
|
)
|
|
template.save()
|
|
return template
|
|
|
|
@staticmethod
|
|
def AssignPermToTemplate(TemplateUUID, PermUUID):
|
|
"""为岗位模板关联权限"""
|
|
ptp = PositionTemplatePermission(
|
|
PTPermUUID=uuid.uuid4().bytes,
|
|
PositionTemplateUUID=TemplateUUID,
|
|
PermUUID=PermUUID,
|
|
CreateTime=datetime.datetime.utcnow(),
|
|
)
|
|
ptp.save()
|
|
return ptp
|
|
|
|
@staticmethod
|
|
def RemovePermFromTemplate(TemplateUUID, PermUUID):
|
|
"""移除岗位模板与权限的关联"""
|
|
deleted, _ = PositionTemplatePermission.objects.filter(
|
|
PositionTemplateUUID=TemplateUUID, PermUUID=PermUUID
|
|
).delete()
|
|
return deleted > 0
|
|
|
|
@staticmethod
|
|
def GetPermsForTemplate(TemplateUUID):
|
|
"""获取岗位模板关联的所有权限"""
|
|
perm_uuids = PositionTemplatePermission.objects.filter(
|
|
PositionTemplateUUID=TemplateUUID
|
|
).values_list('PermUUID', flat=True)
|
|
return Permission.objects.filter(PermUUID__in=perm_uuids, PermStatus=1)
|
|
|
|
@staticmethod
|
|
def GetTemplatesForTenant(TenantUUID):
|
|
"""获取租户下的所有岗位模板"""
|
|
return PositionTemplate.objects.filter(TenantUUID=TenantUUID, TemplateStatus=1)
|
|
|
|
@staticmethod
|
|
def CopyTemplateToRole(TemplateUUID, RoleName, TenantUUID):
|
|
"""从岗位模板复制权限到新角色"""
|
|
template = PositionTemplate.objects.get(PositionTemplateUUID=TemplateUUID)
|
|
return template.CopyToRole(RoleName, TenantUUID)
|