from sqlalchemy import Column, Integer, String, DateTime, ForeignKey, func, Table from sqlalchemy.orm import relationship from sqlalchemy.ext.declarative import declarative_base from datetime import datetime Base = declarative_base() class Role(Base): """角色数据库模型""" __tablename__ = "role" id = Column(Integer, primary_key=True, index=True, comment="角色ID") name = Column(String(50), nullable=False, unique=True, comment="角色名称") createtime = Column(DateTime, default=datetime.utcnow, comment="创建时间") updatetime = Column( DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, comment="更新时间" ) creator = Column(String(50), nullable=True, comment="创建人") # 关联到User users = relationship("User", back_populates="role_rel") # 关联到Permission(多对多) permissions = relationship( "Permission", secondary="role_permission", back_populates="roles" ) class User(Base): """用户数据库模型""" __tablename__ = "users" id = Column(Integer, primary_key=True, index=True) username = Column(String(50), unique=True, nullable=False, comment="登录名") nickname = Column(String(50), nullable=False, comment="昵称") email = Column(String(50), nullable=True, comment="电子邮箱") phone = Column(String(11), nullable=True, comment="手机号码") wx_openid = Column(String(100), nullable=True, comment="微信OpenID") password_hash = Column(String(128), nullable=False, comment="密码哈希值") avatar = Column(String(255), nullable=True, comment="头像路径") role_id = Column(Integer, ForeignKey("role.id"), default=2, comment="角色ID") createtime = Column(DateTime, default=datetime.utcnow, comment="创建时间") updatetime = Column( DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, comment="更新时间" ) lastlogintime = Column(DateTime, comment="最后登录时间") # 关联到Role role_rel = relationship("Role", back_populates="users") class Permission(Base): """权限数据库模型""" __tablename__ = "permission" id = Column(Integer, primary_key=True, index=True, comment="权限ID") name = Column(String(100), nullable=False, comment="权限名称") code = Column(String(100), nullable=False, unique=True, comment="权限编码") parentid = Column(Integer, default=0, comment="父权限ID(0表示顶级模块)") description = Column(String(255), nullable=True, comment="权限描述") createtime = Column(DateTime, default=datetime.utcnow, comment="创建时间") updatetime = Column( DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, comment="更新时间" ) # 关联到Role(多对多) roles = relationship( "Role", secondary="role_permission", back_populates="permissions" ) # 角色权限关联表(多对多) role_permission = Table( "role_permission", Base.metadata, Column("role_id", Integer, ForeignKey("role.id"), primary_key=True, comment="角色ID"), Column("permission_id", Integer, ForeignKey("permission.id"), primary_key=True, comment="权限ID") ) class SystemSetting(Base): """系统设置数据库模型""" __tablename__ = "system_setting" id = Column(Integer, primary_key=True, index=True, comment="设置ID") key = Column(String(100), nullable=False, unique=True, comment="设置键名") value = Column(String(1000), nullable=False, comment="设置值") description = Column(String(255), nullable=True, comment="设置描述") createtime = Column(DateTime, default=datetime.utcnow, comment="创建时间") updatetime = Column( DateTime, default=datetime.utcnow, onupdate=datetime.utcnow, comment="更新时间" )