cosmo_backend/app/models/db/role.py

29 lines
1.1 KiB
Python

"""
Role ORM model
"""
from sqlalchemy import Column, String, Integer, Text, TIMESTAMP, Index
from sqlalchemy.sql import func
from sqlalchemy.orm import relationship
from app.database import Base
from app.models.db.user import user_roles
class Role(Base):
"""User role (admin, user, etc.)"""
__tablename__ = "roles"
id = Column(Integer, primary_key=True, autoincrement=True)
name = Column(String(50), unique=True, nullable=False, index=True, comment="Role name (e.g., 'admin', 'user')")
display_name = Column(String(100), nullable=False, comment="Display name")
description = Column(Text, nullable=True, comment="Role description")
created_at = Column(TIMESTAMP, server_default=func.now())
updated_at = Column(TIMESTAMP, server_default=func.now(), onupdate=func.now())
# Relationships
users = relationship("User", secondary=user_roles, back_populates="roles")
menus = relationship("RoleMenu", back_populates="role", cascade="all, delete-orphan")
def __repr__(self):
return f"<Role(id={self.id}, name='{self.name}')>"