barker/barker/barker/models/role.py

33 lines
935 B
Python

import uuid
from typing import TYPE_CHECKING, List
from barker.models.role_permission import RolePermission
from sqlalchemy import Unicode, text
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import Mapped, mapped_column, relationship
from ..db.base_class import reg
if TYPE_CHECKING:
from .permission import Permission
@reg.mapped_as_dataclass(unsafe_hash=True)
class Role:
__tablename__ = "roles"
id: Mapped[uuid.UUID] = mapped_column(
"id", UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"), insert_default=uuid.uuid4
)
name: Mapped[str] = mapped_column("name", Unicode(255), unique=True, nullable=False)
permissions: Mapped[List["Permission"]] = relationship(
"Permission", secondary=RolePermission.__table__, back_populates="roles"
)
def __init__(self, name=None, id_=None):
self.name = name
self.id = id_