brewman/brewman/brewman/models/role.py

33 lines
936 B
Python

from __future__ import annotations
import uuid
from typing import TYPE_CHECKING, List, Optional
from sqlalchemy import Column, Unicode
from sqlalchemy.dialects.postgresql import UUID
from sqlalchemy.orm import relationship
from .meta import Base
from .role_permission import role_permission
if TYPE_CHECKING:
# if the target of the relationship is in another module
# that cannot normally be imported at runtime
from .permission import Permission
class Role(Base):
__tablename__ = "roles"
id: uuid.UUID = Column("id", UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
name: str = Column("name", Unicode(255), unique=True)
permissions: List["Permission"] = relationship("Permission", secondary=role_permission, back_populates="roles")
def __init__(self, name: str, id_: Optional[uuid.UUID] = None) -> None:
self.name = name
if id_ is not None:
self.id = id_