Files
web_security/models.py

52 lines
2.2 KiB
Python
Raw Normal View History

from sqlalchemy import Column, Integer, String, Text, DateTime, Boolean, ForeignKey
from sqlalchemy.orm import relationship
from sqlalchemy.sql import func
from database import Base
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True, index=True)
username = Column(String(50), unique=True, index=True, nullable=False)
email = Column(String(100), unique=True, index=True, nullable=False)
hashed_password = Column(String(255), nullable=False)
full_name = Column(String(100), nullable=True)
is_admin = Column(Boolean, default=False)
is_active = Column(Boolean, default=True)
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
# 关系
documents = relationship("Document", back_populates="owner")
operation_logs = relationship("UserOperationLog", back_populates="user")
class Document(Base):
__tablename__ = "documents"
id = Column(Integer, primary_key=True, index=True)
title = Column(String(200), nullable=False)
content = Column(Text, nullable=True)
description = Column(String(500), nullable=True)
file_type = Column(String(50), default="txt") # txt, pdf, doc, etc.
file_size = Column(Integer, default=0) # 文件大小(字节)
is_public = Column(Boolean, default=False)
owner_id = Column(Integer, ForeignKey("users.id"))
created_at = Column(DateTime(timezone=True), server_default=func.now())
updated_at = Column(DateTime(timezone=True), onupdate=func.now())
# 关系
owner = relationship("User", back_populates="documents")
class UserOperationLog(Base):
__tablename__ = "user_operation_logs"
id = Column(Integer, primary_key=True, index=True)
user_id = Column(Integer, ForeignKey("users.id"))
operation = Column(String(100), nullable=False) # 操作类型
details = Column(Text, nullable=True) # 操作详情
ip_address = Column(String(50), nullable=True) # IP地址
user_agent = Column(String(500), nullable=True) # 用户代理
created_at = Column(DateTime(timezone=True), server_default=func.now())
# 关系
user = relationship("User", back_populates="operation_logs")