from datetime import datetime from flask_login import UserMixin from app.extensions import db, login_manager class User(UserMixin, db.Model): __tablename__ = 'users' id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(64), unique=True, nullable=False, index=True) email = db.Column(db.String(128), unique=True, nullable=False, index=True) password_hash = db.Column(db.String(255), nullable=False) role = db.Column(db.Enum('admin', 'user'), nullable=False, default='user') is_active = db.Column(db.Boolean, default=True, nullable=False) avatar = db.Column(db.String(255), nullable=True) created_at = db.Column(db.DateTime, default=datetime.utcnow, nullable=False) last_login = db.Column(db.DateTime, nullable=True) # 关联资源 resources = db.relationship('Resource', backref='owner', lazy='dynamic', cascade='all, delete-orphan') def __repr__(self): return f'' @property def is_admin(self): return self.role == 'admin' def get_id(self): return str(self.id) @login_manager.user_loader def load_user(user_id): return db.session.get(User, int(user_id))