Files
aiagent/saars/backend/app/models/user.py
2026-03-07 09:01:00 +08:00

47 lines
1.9 KiB
Python

"""
User and Role models for authentication and RBAC.
"""
import uuid
from datetime import datetime
from app import db
class Role(db.Model):
__tablename__ = "roles"
id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
name = db.Column(db.String(64), unique=True, nullable=False)
description = db.Column(db.String(256))
permissions = db.Column(db.JSON, default=list) # list of permission strings
created_at = db.Column(db.DateTime, default=datetime.utcnow)
users = db.relationship("User", backref="role", lazy="dynamic")
class User(db.Model):
__tablename__ = "users"
id = db.Column(db.String(36), primary_key=True, default=lambda: str(uuid.uuid4()))
email = db.Column(db.String(255), unique=True, nullable=False, index=True)
username = db.Column(db.String(64), unique=True, nullable=False, index=True)
password_hash = db.Column(db.String(256), nullable=False)
display_name = db.Column(db.String(128))
avatar_url = db.Column(db.String(512))
role_id = db.Column(db.String(36), db.ForeignKey("roles.id"), nullable=True)
is_active = db.Column(db.Boolean, default=True)
is_verified = db.Column(db.Boolean, default=False)
last_login_at = db.Column(db.DateTime)
created_at = db.Column(db.DateTime, default=datetime.utcnow)
updated_at = db.Column(db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)
conversations = db.relationship("Conversation", backref="user", lazy="dynamic", foreign_keys="Conversation.user_id")
def to_dict(self):
return {
"id": self.id,
"email": self.email,
"username": self.username,
"display_name": self.display_name or self.username,
"avatar_url": self.avatar_url,
"is_active": self.is_active,
"created_at": self.created_at.isoformat() if self.created_at else None,
}