| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120 |
- 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):
- __tablename__ = "user"
- id = Column(Integer, primary_key=True, index=True)
- username = Column(String(255), unique=True, index=True)
- hashed_password = Column(String(255))
- compellation = Column(String(255), nullable=False, default="")
- phone = Column(String(255), nullable=False, default="")
- 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)
- 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
|