from datetime import datetime
|
from typing import Optional
|
|
from pydantic import BaseModel, constr
|
from sqlalchemy import Column, Integer, String, DateTime, Table, ForeignKey
|
from sqlalchemy.orm import relationship, backref
|
|
from app.models.base_model import Base
|
|
# 角色资源关联表
|
role_resource_table = Table('role_resource', Base.metadata,
|
Column('role_id', String(36), ForeignKey('role.id', ondelete='CASCADE')),
|
Column('resource_id', String(36), ForeignKey('resource.id', ondelete='CASCADE')))
|
|
|
|
class RoleModel(Base):
|
__tablename__ = 'role'
|
id = Column(String(36), primary_key=True, index=True)
|
created_at = Column(DateTime, default=datetime.now())
|
updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now())
|
name = Column(String(128), unique=True, nullable=False, index=True)
|
description = Column(String(255))
|
iconCls = Column(String(100))
|
seq = Column(Integer)
|
roleKey = Column(String(100))
|
dataScope = Column(Integer)
|
status = Column(String(10), default="0")
|
creator = Column(Integer)
|
|
# 包含资源
|
resources = relationship('ResourceModel',
|
secondary=role_resource_table,
|
backref=backref('roles', lazy='dynamic')) # 资源所属角色
|
|
def get_id(self):
|
return str(self.id)
|
|
def to_dict(self):
|
return dict([(k, getattr(self, k)) for k in self.__dict__.keys() if not k.startswith("_")])
|
|
def __repr__(self):
|
return '<Role name:%r description:%r iconCls:%r seq:%r>\n' \
|
% (self.NAME, self.DESCRIPTION, self.ICONCLS, self.SEQ)
|
|
def to_json(self):
|
json = {
|
'roleId': self.id,
|
'createTime': self.created_at.strftime('%Y-%m-%d %H:%M:%S'),
|
'updateTime': self.updated_at.strftime('%Y-%m-%d %H:%M:%S'),
|
'roleName': self.name,
|
'remark': self.description,
|
'iconCls': self.iconCls,
|
'roleSort': self.seq,
|
'status': self.status,
|
'roleKey': self.roleKey,
|
'dataScope': self.dataScope
|
}
|
|
if len(self.resources) > 0:
|
json['resources'] = [resource.to_json() for resource in self.resources]
|
|
if hasattr(self, 'flag'):
|
json['flag'] = self.flag
|
|
return json
|
|
|
class RoleData(BaseModel):
|
remark: Optional[str] = ""
|
roleName: str
|
roleKey: Optional[str] = ""
|
dataScope: Optional[str] = ""
|
|
|
class RoleStatus(BaseModel):
|
role_id: str
|
status: constr(min_length=1, max_length=1, pattern='^(0|1)$')
|
|
|
class RoleEdit(BaseModel):
|
role_id: str
|
remark: Optional[str] = ""
|
roleName: Optional[str] = ""
|
resources: Optional[list] = []
|
roleKey: Optional[str] = ""
|
dataScope: Optional[int] = 0
|
editType: int
|