zhaoqingang
2024-11-13 de45d8dc19cd16b85344a3c3bbb243a12e8811a0
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
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