| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- 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')),
- Column('resource_id', String(36), ForeignKey('resource.id')))
- 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
- 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] = []
|