api-admim/app/rbac/modelos.txt

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)
)