Skip to content

Role

Bases: IntPK, UpdatedAtMixin, SQLModel

Source code in fastbase/models/rbac.py
class Role(IntPK, UpdatedAtMixin, SQLModel, table=True):
    __tablename__ = 'auth_role'
    name: str = Field(max_length=20, unique=True)
    description: str | None = Field(max_length=199, default='')
    groups: list[str] = Field(sa_column=Column(ARRAY(String)), default=[])

    def __repr__(self):
        return modstr(self, 'name', 'description')

    # TESTME: Untested
    @classmethod
    async def create(cls, session: AsyncSession, *, name:str, groups: set, description: str | None = None) -> Self:
        """Create new role. Requires the role.create permission."""
        try:
            role = cls(name=name, groups=groups, description=description)
            session.add(role)
            await session.commit()
            await session.refresh(role)
            return role
        except IntegrityError:
            raise

    # TESTME: Untested
    @classmethod
    async def reset(cls, session: AsyncSession, id: int, groups: set) -> Self:
        """Reset groups. Requires role.reset permission."""
        if role := await session.get(cls, id):
            role.groups = groups
            session.add(role)
            await session.commit()
        return role

    # TESTME: Untested
    @classmethod
    async def describe(cls, session: AsyncSession, id: int, description: str) -> Self:
        """Change role description. Requires role.update permission."""
        if role := await session.get(cls, id):
            role.description = description
            session.add(role)
            await session.commit()
        return role

Attributes

__tablename__ = 'auth_role' class-attribute instance-attribute

description: str | None = Field(max_length=199, default='') class-attribute instance-attribute

groups: list[str] = Field(sa_column=Column(ARRAY(String)), default=[]) class-attribute instance-attribute

name: str = Field(max_length=20, unique=True) class-attribute instance-attribute

Functions

__repr__()

Source code in fastbase/models/rbac.py
def __repr__(self):
    return modstr(self, 'name', 'description')

create(session, *, name, groups, description=None) async classmethod

Create new role. Requires the role.create permission.

Source code in fastbase/models/rbac.py
@classmethod
async def create(cls, session: AsyncSession, *, name:str, groups: set, description: str | None = None) -> Self:
    """Create new role. Requires the role.create permission."""
    try:
        role = cls(name=name, groups=groups, description=description)
        session.add(role)
        await session.commit()
        await session.refresh(role)
        return role
    except IntegrityError:
        raise

describe(session, id, description) async classmethod

Change role description. Requires role.update permission.

Source code in fastbase/models/rbac.py
@classmethod
async def describe(cls, session: AsyncSession, id: int, description: str) -> Self:
    """Change role description. Requires role.update permission."""
    if role := await session.get(cls, id):
        role.description = description
        session.add(role)
        await session.commit()
    return role

reset(session, id, groups) async classmethod

Reset groups. Requires role.reset permission.

Source code in fastbase/models/rbac.py
@classmethod
async def reset(cls, session: AsyncSession, id: int, groups: set) -> Self:
    """Reset groups. Requires role.reset permission."""
    if role := await session.get(cls, id):
        role.groups = groups
        session.add(role)
        await session.commit()
    return role