dashboard-nanobot/backend/models/sys_auth.py

116 lines
4.7 KiB
Python

from datetime import datetime
from typing import Optional
from sqlalchemy import UniqueConstraint
from sqlmodel import Field, SQLModel
class SysRole(SQLModel, table=True):
__tablename__ = "sys_role"
__table_args__ = (
UniqueConstraint("role_key", name="uq_sys_role_role_key"),
)
id: Optional[int] = Field(default=None, primary_key=True)
role_key: str = Field(index=True, max_length=64)
name: str = Field(default="", max_length=120)
description: str = Field(default="")
is_active: bool = Field(default=True, index=True)
sort_order: int = Field(default=100, index=True)
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow, index=True)
class SysUser(SQLModel, table=True):
__tablename__ = "sys_user"
__table_args__ = (
UniqueConstraint("username", name="uq_sys_user_username"),
)
id: Optional[int] = Field(default=None, primary_key=True)
username: str = Field(index=True, max_length=64)
display_name: str = Field(default="", max_length=120)
password_hash: str = Field(default="", max_length=255)
password_salt: str = Field(default="", max_length=64)
role_id: Optional[int] = Field(default=None, foreign_key="sys_role.id", index=True)
is_active: bool = Field(default=True, index=True)
last_login_at: Optional[datetime] = Field(default=None, index=True)
current_token_hash: Optional[str] = Field(default=None, index=True, max_length=255)
current_token_expires_at: Optional[datetime] = Field(default=None, index=True)
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow, index=True)
class SysMenu(SQLModel, table=True):
__tablename__ = "sys_menu"
__table_args__ = (
UniqueConstraint("menu_key", name="uq_sys_menu_menu_key"),
)
id: Optional[int] = Field(default=None, primary_key=True)
menu_key: str = Field(index=True, max_length=64)
parent_key: str = Field(default="", index=True, max_length=64)
title: str = Field(default="", max_length=120)
title_en: str = Field(default="", max_length=120)
menu_type: str = Field(default="item", max_length=32, index=True)
route_path: str = Field(default="", max_length=255)
icon: str = Field(default="", max_length=64)
permission_key: str = Field(default="", max_length=120)
visible: bool = Field(default=True, index=True)
sort_order: int = Field(default=100, index=True)
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow, index=True)
class SysPermission(SQLModel, table=True):
__tablename__ = "sys_permission"
__table_args__ = (
UniqueConstraint("permission_key", name="uq_sys_permission_permission_key"),
)
id: Optional[int] = Field(default=None, primary_key=True)
permission_key: str = Field(index=True, max_length=120)
name: str = Field(default="", max_length=120)
menu_key: str = Field(default="", index=True, max_length=64)
action: str = Field(default="view", max_length=32, index=True)
description: str = Field(default="")
sort_order: int = Field(default=100, index=True)
created_at: datetime = Field(default_factory=datetime.utcnow)
updated_at: datetime = Field(default_factory=datetime.utcnow, index=True)
class SysRoleMenu(SQLModel, table=True):
__tablename__ = "sys_role_menu"
__table_args__ = (
UniqueConstraint("role_id", "menu_id", name="uq_sys_role_menu_role_menu"),
)
id: Optional[int] = Field(default=None, primary_key=True)
role_id: int = Field(foreign_key="sys_role.id", index=True)
menu_id: int = Field(foreign_key="sys_menu.id", index=True)
created_at: datetime = Field(default_factory=datetime.utcnow)
class SysRolePermission(SQLModel, table=True):
__tablename__ = "sys_role_permission"
__table_args__ = (
UniqueConstraint("role_id", "permission_id", name="uq_sys_role_permission_role_permission"),
)
id: Optional[int] = Field(default=None, primary_key=True)
role_id: int = Field(foreign_key="sys_role.id", index=True)
permission_id: int = Field(foreign_key="sys_permission.id", index=True)
created_at: datetime = Field(default_factory=datetime.utcnow)
class SysUserBot(SQLModel, table=True):
__tablename__ = "sys_user_bot"
__table_args__ = (
UniqueConstraint("user_id", "bot_id", name="uq_sys_user_bot_user_bot"),
)
id: Optional[int] = Field(default=None, primary_key=True)
user_id: int = Field(foreign_key="sys_user.id", index=True)
bot_id: str = Field(foreign_key="bot_instance.id", index=True, max_length=120)
created_at: datetime = Field(default_factory=datetime.utcnow)