61 lines
2.9 KiB
Plaintext
61 lines
2.9 KiB
Plaintext
from sqlalchemy import Column, String, Table, ForeignKey, Integer, Boolean
|
|
from sqlalchemy.dialects.postgresql import UUID
|
|
from sqlalchemy.orm import relationship, declarative_base, Mapped, mapped_column
|
|
from fastapi_users.db import SQLAlchemyBaseUserTableUUID, SQLAlchemyBaseUserTable
|
|
from typing import List
|
|
|
|
Base = declarative_base()
|
|
|
|
|
|
class Permissao(Base):
|
|
__tablename__ = "permissoes"
|
|
id = Column(Integer, primary_key=True, index=True)
|
|
nome: Mapped[str] = mapped_column(String(50), nullable=False, unique=True)
|
|
papeis: Mapped[List["Papel"]] = relationship(secondary='papel_permissoes',
|
|
back_populates='permissoes',
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
join_depth=1)
|
|
|
|
|
|
class Papel(Base):
|
|
__tablename__ = "papeis"
|
|
id = Column(UUID(as_uuid=True), primary_key=True, index=True)
|
|
nome: Mapped[str] = mapped_column(String(50), nullable=False, unique=True)
|
|
permissoes: Mapped[List[Permissao]] = relationship(secondary='papel_permissoes',
|
|
back_populates='papeis',
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
join_depth=1)
|
|
usuarios: Mapped[List["User"]] = relationship(secondary='papeis_usuario',
|
|
back_populates='papeis',
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
join_depth=1)
|
|
|
|
|
|
class User(SQLAlchemyBaseUserTable, Base):
|
|
__tablename__ = "user"
|
|
id = Column(UUID(as_uuid=True), primary_key=True, index=True)
|
|
username = Column(String, nullable=False, unique=True)
|
|
papeis: Mapped[List[Papel]] = relationship(secondary='papeis_usuario',
|
|
back_populates='usuarios',
|
|
passive_deletes=True,
|
|
lazy="selectin",
|
|
join_depth=1)
|
|
is_active = Column(Boolean, default=True, nullable=False)
|
|
is_superuser = Column(Boolean, default=False, nullable=False)
|
|
|
|
|
|
papeis_usuario = Table(
|
|
'papeis_usuario', Base.metadata,
|
|
Column('user_uuid', UUID(as_uuid=True), ForeignKey('user.id'), primary_key=True),
|
|
Column('papel_uuid', UUID(as_uuid=True), ForeignKey('papeis.id'), primary_key=True)
|
|
)
|
|
|
|
papel_permissoes = Table(
|
|
'papel_permissoes', Base.metadata,
|
|
Column('papel_uuid', UUID(as_uuid=True), ForeignKey('papeis.id'), primary_key=True),
|
|
Column('permissao_id', Integer, ForeignKey('permissoes.id'), primary_key=True)
|
|
)
|