zhaoqingang
2024-12-17 e6c5e89f09637b8d9ebca6895d781663f12646d6
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
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] = []