Skip to main content

A simple way to manage object permissions.

Project description

Permission Manager

A simple way to manage object permissions.

Install

pip install permission-manager

Example

Use BasePermissionManager

import dataclasses
from permission_manager import BasePermissionManager, PermissionResult


@dataclasses.dataclass
class User:
    name: str


@dataclasses.dataclass
class Person:
    first_name: str
    last_name: str
    status: str


class PersonPermissionManager(BasePermissionManager):
    instance: Person

    def has_create_permission(self):
        return True
    
    def has_delete_permission(self):
        return self.user.name == 'admin'

    def has_access_permission(self):
        if self.instance.status == 'excommunicado':
            return PermissionResult('Due status')
        return True


manager = PersonPermissionManager()
manager.has_permission('create')
# same as 
# manager.has_create_permission()
# > True

manager = PersonPermissionManager(
    instance=Person(
        first_name='John',
        last_name='Wick',
        status='excommunicado',
    ),
    user=User(name='Ms. Perkins'),
)
manager.has_permission('delete')
# > False
manager.has_permission('access')
# > PermissionResult(value=False, message=['Due status'])

manager.resolve()
# > {'access': False, 'create': True, 'delete': False}
manager.resolve(with_messages=True)
# > {'access': {'allow': False, 'message': ['Due status']},
#    'create': {'allow': True, 'message': None},
#    'delete': {'allow': False, 'message': None}}

Also, it's include PermissionManager, which add additional functionality to check parent permissions

import dataclasses
from permission_manager import PermissionManager


class PostPermissionManager(PermissionManager):
    instance: 'Post'

    def has_update_permission(self):
        return self.instance.status == 'draft'


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

    permission_manager = PostPermissionManager

    
class ImagePermissionManager(PermissionManager):
    parent_attr = 'post'
    instance: 'Image'
    
    def has_update_permission(self):
        return self.parent_permission_manager.has_permission('update')


@dataclasses.dataclass
class Image:
    post: Post
    file: str

post = Post(title='Test')
manager = ImagePermissionManager(
    instance=Image(
        post=post,
        file='/path/to/file',
    ),
)
manager.has_permission('update')
# > True
post.status = 'published'
manager.has_permission('update')
# > False

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

permission_manager-0.2.0.tar.gz (4.8 kB view details)

Uploaded Source

Built Distribution

permission_manager-0.2.0-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file permission_manager-0.2.0.tar.gz.

File metadata

  • Download URL: permission_manager-0.2.0.tar.gz
  • Upload date:
  • Size: 4.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/4.0.2 CPython/3.11.8

File hashes

Hashes for permission_manager-0.2.0.tar.gz
Algorithm Hash digest
SHA256 ef619ad94728796134823934413b5ad06dbd3bfbf2be12f6f23e6caeff9bae47
MD5 c113b4fee63b3020ba1587c61bf676d6
BLAKE2b-256 e7bea8b3607fa8f2ef9274a2039bd322d3c9a1ecc0d8dfca1ed3768e2dbdc47c

See more details on using hashes here.

File details

Details for the file permission_manager-0.2.0-py3-none-any.whl.

File metadata

File hashes

Hashes for permission_manager-0.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 245a62c0f8f84ae73b6db888879f0e7aa3cc53629d1e0d51f608dff8b22acdc2
MD5 44ad82fd1ee6d0e5b335efea76dbfe07
BLAKE2b-256 9ac341eeac37eeba056719cce47862d1daf0bc3106046d4b41a986392cac4cec

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page