Getting Started

Let’s start with some class:

import dataclasses


@dataclasses.dataclass
class Post:
    title: str
    content: str
    status: str = 'draft'

Write permission class for it:

from permission_manager import BasePermissionManager


class PostPermissionManager(BasePermissionManager):
    def has_create_permission(self) -> bool:
        return True

    def has_delete_permission(self) -> bool:
        return False

Now we can check permissions:

manager = PostPermissionManager()

manager.has_permission('create')
# > True

manager.has_permission('delete')
# > False

User and instance

To check the permissions of a specific instance and for a specific user, you need to pass arguments to the manager, which will be available as corresponding attributes.

Let’s write example user class and change permissions:

@dataclasses.dataclass
class User:
    username: str


class PostPermissionManager(BasePermissionManager):
    def has_create_permission(self) -> bool:
        return self.user.username == 'admin'

    def has_update_permission(self) -> bool:
        return self.has_permission('create')

    def has_delete_permission(self) -> bool:
        return self.instance.status == 'draft'


manager = PostPermissionManager(
    user=User(username='admin'),
    instance=Post(
        title='New post',
        content='Test content',
        status='published',
    )
)

manager.has_permission('update')
# > True

manager.has_permission('delete')
# > False