permission-manager


Namepermission-manager JSON
Version 0.3.0 PyPI version JSON
download
home_pagehttps://github.com/kindlycat/permission-manager
SummaryA simple way to manage object permissions.
upload_time2024-04-28 01:56:06
maintainerNone
docs_urlNone
authorGrigory Mishchenko
requires_python<4.0,>=3.10
licenseMIT
keywords permissions
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Permission Manager

A simple way to manage object permissions.

## Install

```bash
pip install permission-manager
```

## Example

Use `BasePermissionManager`

```python
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

```python
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
```


            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/kindlycat/permission-manager",
    "name": "permission-manager",
    "maintainer": null,
    "docs_url": null,
    "requires_python": "<4.0,>=3.10",
    "maintainer_email": null,
    "keywords": "permissions",
    "author": "Grigory Mishchenko",
    "author_email": "grishkokot@gmail.com",
    "download_url": "https://files.pythonhosted.org/packages/18/c1/c1c744c0622703883e8d898807ea62f04113125f5472c536c0270527f3fa/permission_manager-0.3.0.tar.gz",
    "platform": null,
    "description": "# Permission Manager\n\nA simple way to manage object permissions.\n\n## Install\n\n```bash\npip install permission-manager\n```\n\n## Example\n\nUse `BasePermissionManager`\n\n```python\nimport dataclasses\nfrom permission_manager import BasePermissionManager, PermissionResult\n\n\n@dataclasses.dataclass\nclass User:\n    name: str\n\n\n@dataclasses.dataclass\nclass Person:\n    first_name: str\n    last_name: str\n    status: str\n\n\nclass PersonPermissionManager(BasePermissionManager):\n    instance: Person\n\n    def has_create_permission(self):\n        return True\n    \n    def has_delete_permission(self):\n        return self.user.name == 'admin'\n\n    def has_access_permission(self):\n        if self.instance.status == 'excommunicado':\n            return PermissionResult('Due status')\n        return True\n\n\nmanager = PersonPermissionManager()\nmanager.has_permission('create')\n# same as \n# manager.has_create_permission()\n# > True\n\nmanager = PersonPermissionManager(\n    instance=Person(\n        first_name='John',\n        last_name='Wick',\n        status='excommunicado',\n    ),\n    user=User(name='Ms. Perkins'),\n)\nmanager.has_permission('delete')\n# > False\nmanager.has_permission('access')\n# > PermissionResult(value=False, message=['Due status'])\n\nmanager.resolve()\n# > {'access': False, 'create': True, 'delete': False}\nmanager.resolve(with_messages=True)\n# > {'access': {'allow': False, 'messages': ['Due status']},\n#    'create': {'allow': True, 'messages': None},\n#    'delete': {'allow': False, 'messages': None}}\n```\n\nAlso, it's include `PermissionManager`, which add additional functionality to check parent permissions\n\n```python\nimport dataclasses\nfrom permission_manager import PermissionManager\n\n\nclass PostPermissionManager(PermissionManager):\n    instance: 'Post'\n\n    def has_update_permission(self):\n        return self.instance.status == 'draft'\n\n\n@dataclasses.dataclass\nclass Post:\n    title: str\n    status: str = 'draft'\n\n    permission_manager = PostPermissionManager\n\n    \nclass ImagePermissionManager(PermissionManager):\n    parent_attr = 'post'\n    instance: 'Image'\n    \n    def has_update_permission(self):\n        return self.parent_permission_manager.has_permission('update')\n\n\n@dataclasses.dataclass\nclass Image:\n    post: Post\n    file: str\n\npost = Post(title='Test')\nmanager = ImagePermissionManager(\n    instance=Image(\n        post=post,\n        file='/path/to/file',\n    ),\n)\nmanager.has_permission('update')\n# > True\npost.status = 'published'\nmanager.has_permission('update')\n# > False\n```\n\n",
    "bugtrack_url": null,
    "license": "MIT",
    "summary": "A simple way to manage object permissions.",
    "version": "0.3.0",
    "project_urls": {
        "Homepage": "https://github.com/kindlycat/permission-manager",
        "Repository": "https://github.com/kindlycat/permission-manager"
    },
    "split_keywords": [
        "permissions"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "b62c2564fbff09d76408ff6c9cfbf2ca1f9e17afd2205f736e4de9c8d3cd0878",
                "md5": "bbb3d2c732a6a5f0f33106928de307ba",
                "sha256": "d8ae285e56ef9dd8f6dbabeac891e26369ee7041f3b37e277d9479a0a8e1e50d"
            },
            "downloads": -1,
            "filename": "permission_manager-0.3.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "bbb3d2c732a6a5f0f33106928de307ba",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": "<4.0,>=3.10",
            "size": 6050,
            "upload_time": "2024-04-28T01:56:04",
            "upload_time_iso_8601": "2024-04-28T01:56:04.534423Z",
            "url": "https://files.pythonhosted.org/packages/b6/2c/2564fbff09d76408ff6c9cfbf2ca1f9e17afd2205f736e4de9c8d3cd0878/permission_manager-0.3.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "18c1c1c744c0622703883e8d898807ea62f04113125f5472c536c0270527f3fa",
                "md5": "496f600efef5fd00904f3a7188d56309",
                "sha256": "c4fe863380f49dd6489d94ed0fa57aa81d1eb4b8b2ea3ebaf9805f51e8a28f8d"
            },
            "downloads": -1,
            "filename": "permission_manager-0.3.0.tar.gz",
            "has_sig": false,
            "md5_digest": "496f600efef5fd00904f3a7188d56309",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": "<4.0,>=3.10",
            "size": 5144,
            "upload_time": "2024-04-28T01:56:06",
            "upload_time_iso_8601": "2024-04-28T01:56:06.292461Z",
            "url": "https://files.pythonhosted.org/packages/18/c1/c1c744c0622703883e8d898807ea62f04113125f5472c536c0270527f3fa/permission_manager-0.3.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2024-04-28 01:56:06",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "kindlycat",
    "github_project": "permission-manager",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "lcname": "permission-manager"
}
        
Elapsed time: 0.25355s