| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104 |
- 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="1")
- creator = Column(Integer)
- role_type = Column(Integer, default=1)
- # 包含资源
- 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]
- json['dept'] = [dept.to_base_json() for dept in self.organizations]
- return json
- def to_dict(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
- }
- return json
- class RoleData(BaseModel):
- remark: Optional[str] = ""
- roleName: str
- roleKey: Optional[str] = ""
- dataScope: Optional[int] = 0
- class RoleStatus(BaseModel):
- roleId: str
- status: constr(min_length=1, max_length=1, pattern='^(0|1)$')
- class RoleEdit(BaseModel):
- roleId: str
- remark: Optional[str] = ""
- roleName: Optional[str] = ""
- resources: Optional[list] = []
- roleKey: Optional[str] = ""
- dataScope: Optional[int] = 0
- editType: int
- depts: Optional[list] = []
|