zhaoqingang
2024-11-11 c1768114de381e37e272e9faf7db8e95a93ff381
app/models/user_model.py
@@ -1,6 +1,22 @@
from sqlalchemy import Column, Integer, String
from datetime import datetime
from sqlalchemy import Column, Integer, String, Table, ForeignKey, DateTime
from sqlalchemy.orm import relationship, backref
from app.models.base_model import Base
user_organization_table = Table('user_organization',Base.metadata
                                   , Column('user_id', Integer, ForeignKey('user.id'))
                                   , Column('organization_id', String(36), ForeignKey('organization.id')))
user_role_table = Table('user_role', Base.metadata
                           , Column('user_id', Integer, ForeignKey('user.id'))
                           , Column('role_id', String(36), ForeignKey('role.id')))
user_group_table = Table('user_group', Base.metadata
                           , Column('user_id', Integer, ForeignKey('user.id'))
                           , Column('group_id', Integer, ForeignKey('group.id')))
class UserModel(Base):
@@ -13,4 +29,92 @@
    email = Column(String(255), nullable=False, default="")
    description = Column(String(255), nullable=False, default="")
    ragflow_id = Column(String(32), unique=True, index=True)
    bisheng_id = Column(Integer, unique=True, index=True)
    bisheng_id = Column(Integer, unique=True, index=True)
    login_name = Column(String(100))
    status = Column(String(10), nullable=False, default="1")
    creator = Column(String(36))
    sex = Column(String(1))
    age = Column(Integer)
    created_at = Column(DateTime, default=datetime.now())
    updated_at = Column(DateTime, default=datetime.now(), onupdate=datetime.now())
    organizations = relationship('OrganizationModel',
                                    secondary=user_organization_table,
                                    backref=backref('users', lazy='dynamic'))
    roles = relationship('RoleModel',
                            secondary=user_role_table,
                            backref=backref('users', lazy='dynamic'))
    groups = relationship('GroupModel',
                         secondary=user_group_table,
                         backref=backref('users', lazy='dynamic'))
    def have_permission(self, url):
        permissions = []
        for resource in self.resources:
            permissions.extend(resource)
        if filter(lambda x: x.URL == url, permissions):
            return True
        permissions = []
        for organization in self.organizations:
            permissions.extend([resource for resource in organization.resources])
        return filter(lambda x: x.NAME == url, permissions)
    def __repr__(self):
        return '<User %r>\n' % (self.NAME)
    def to_dict(self):
        return {
            'userId': self.id,
            'userName': self.username,
            'loginName': self.login_name if self.login_name else "",
            'status': self.status,
        }
    def to_json(self):
        json = {
            'userId': self.id,
            'createTime': self.created_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else "",
            'updateTime': self.updated_at.strftime('%Y-%m-%d %H:%M:%S') if self.created_at else "",
            'userName': self.username,
            'loginName': self.login_name,
            'sex': self.sex,
            'age': self.age,
            "status": self.status,
            'photo': self.phone,
            'email': self.email,
            # 'phoneNumber': self.phone_number
        }
        if len(self.organizations) > 0:
            json['dept'] = [organization.to_json() for organization in self.organizations]
        json['groups'] = [group.to_dict() for group in self.groups]
        roles = []
        # if len(self.roles.all()) > 0:
        #     roles = [role.to_json() for role in self.roles]
        # organization_roles = [role.to_json() for organization in self.organizations for role in
        #                       organization.role_list]
        # for role in organization_roles:
        #     if role not in roles:
        #         roles.append(role)
        json['roles'] = roles
        return json
    def get_children(self):
        """递归获取指定用户的子用户ID列表"""
        users = UserModel.query.filter_by(CREATOR=self.ID).all()
        user_id_list = [user.ID for user in users]
        for user in users:
            user_id_list.extend(user.get_children())
        return user_id_list