Skip to main content

A simple way to manage object permissions.

Project description

Permission Manager

A simple way to manage object permissions.

Full documentation on read the docs.

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, 'messages': ['Due status']},
#    'create': {'allow': True, 'messages': None},
#    'delete': {'allow': False, 'messages': 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.4.0.tar.gz (5.5 kB view details)

Uploaded Source

Built Distribution

permission_manager-0.4.0-py3-none-any.whl (6.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: permission_manager-0.4.0.tar.gz
  • Upload date:
  • Size: 5.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/5.0.0 CPython/3.12.3

File hashes

Hashes for permission_manager-0.4.0.tar.gz
Algorithm Hash digest
SHA256 92dfb5265c270f4abe40244c3d9e250b88d17cace4fcf969d990b15520cf2f51
MD5 358164e7986961b77954440e974fea7c
BLAKE2b-256 a8a169b3aa5f5d8a4f6ec77b2ac40abf23ae61f16e5f0441a43f0f4c3bc89dbd

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for permission_manager-0.4.0-py3-none-any.whl
Algorithm Hash digest
SHA256 176c1a1c529a614cd4772955d7937fd491cf18febe81e47d24acba63503d01bb
MD5 876d9bde62dc6504323f8045734a613f
BLAKE2b-256 928820b9593890ecaa879f01be0603bc1b8176d1331349e75db0994f8e98f15b

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