# Permission Manager for django rest framework
Use [permission_manager](https://github.com/kindlycat/permission-manager) for
django rest framework.
Full documentation on [read the docs](https://permission-manager-drf.readthedocs.io/).
## Install
```bash
pip install permission-manager-drf
```
## Example
```python
from django.db import models
from rest_framework.permissions import IsAuthenticated
from rest_framework.viewsets import ModelViewSet
from rest_framework.decorators import action
from permission_manager_drf import DRFPermissionManager, ManagerPermission
from permission_manager import PermissionResult
# Define permission manager
class SomeModelPermissionManager(DRFPermissionManager):
def has_create_permission(self) -> bool:
return self.user.is_staff
def has_update_permission(self) -> bool:
return self.user.is_staff
def has_delete_permission(self) -> bool:
return self.user.is_staff
def has_view_permission(self) -> bool:
return True
def has_list_permission(self) -> bool:
return True
def has_custom_permission(self) -> bool:
return PermissionResult(
message="You can't do it",
value=self.user.is_staff,
)
# Define model with permission manager attribute
class SomeModel(models.Model):
permission_manager = SomeModelPermissionManager
...
# ViewSet
class TestModelViewSet(ModelViewSet):
permission_classes = [IsAuthenticated, ManagerPermission]
...
@action(detail=True)
def custom(self, request, **kwargs):
...
```
That's all. Now every drf action will be checked by the permission manager.
Also, you can use the serializer field for retrieve permissions you need.
```python
from permission_manager_drf import PermissionField
from rest_framework.serializers import ModelSerializer
class SomeModelSerializer(ModelSerializer):
permissions = PermissionField(actions=('view', 'custom'),)
...
"""
Example output:
{
...,
'permissions': {
'view': {
'allow': True,
'messages': None,
},
'custom': {
'allow': False,
'messages': ["You can't do it"],
},
}
}
"""
```
Raw data
{
"_id": null,
"home_page": "https://github.com/kindlycat/permission-manager-drf",
"name": "permission-manager-drf",
"maintainer": null,
"docs_url": null,
"requires_python": "<4.0,>=3.10",
"maintainer_email": null,
"keywords": "permissions, drf, rest framework",
"author": "Grigory Mishchenko",
"author_email": "grishkokot@gmail.com",
"download_url": "https://files.pythonhosted.org/packages/78/82/e04511366a53fcf29f376ae255b6f56339ce93667e8ba978115a68425ff9/permission_manager_drf-0.2.0.tar.gz",
"platform": null,
"description": "# Permission Manager for django rest framework\n\nUse [permission_manager](https://github.com/kindlycat/permission-manager) for \ndjango rest framework.\n\nFull documentation on [read the docs](https://permission-manager-drf.readthedocs.io/).\n\n## Install\n\n```bash\npip install permission-manager-drf\n```\n\n## Example\n```python\nfrom django.db import models\nfrom rest_framework.permissions import IsAuthenticated\nfrom rest_framework.viewsets import ModelViewSet\nfrom rest_framework.decorators import action\n\nfrom permission_manager_drf import DRFPermissionManager, ManagerPermission\nfrom permission_manager import PermissionResult\n\n\n# Define permission manager\nclass SomeModelPermissionManager(DRFPermissionManager):\n def has_create_permission(self) -> bool:\n return self.user.is_staff\n\n def has_update_permission(self) -> bool:\n return self.user.is_staff\n\n def has_delete_permission(self) -> bool:\n return self.user.is_staff\n\n def has_view_permission(self) -> bool:\n return True\n\n def has_list_permission(self) -> bool:\n return True\n\n def has_custom_permission(self) -> bool:\n return PermissionResult(\n message=\"You can't do it\",\n value=self.user.is_staff,\n )\n\n\n# Define model with permission manager attribute\nclass SomeModel(models.Model):\n permission_manager = SomeModelPermissionManager\n ...\n\n\n# ViewSet\nclass TestModelViewSet(ModelViewSet):\n permission_classes = [IsAuthenticated, ManagerPermission]\n ...\n\n @action(detail=True)\n def custom(self, request, **kwargs):\n ...\n```\nThat's all. Now every drf action will be checked by the permission manager.\n\nAlso, you can use the serializer field for retrieve permissions you need.\n\n```python\nfrom permission_manager_drf import PermissionField\nfrom rest_framework.serializers import ModelSerializer\n\nclass SomeModelSerializer(ModelSerializer):\n permissions = PermissionField(actions=('view', 'custom'),)\n ...\n\n\"\"\"\nExample output:\n{\n ...,\n 'permissions': {\n 'view': {\n 'allow': True,\n 'messages': None,\n },\n 'custom': {\n 'allow': False,\n 'messages': [\"You can't do it\"],\n },\n }\n}\n\"\"\"\n```\n\n",
"bugtrack_url": null,
"license": "MIT",
"summary": "A simple way to manage object permissions in drf.",
"version": "0.2.0",
"project_urls": {
"Homepage": "https://github.com/kindlycat/permission-manager-drf",
"Repository": "https://github.com/kindlycat/permission-manager-drf"
},
"split_keywords": [
"permissions",
" drf",
" rest framework"
],
"urls": [
{
"comment_text": "",
"digests": {
"blake2b_256": "a915600593a6a121c826b1cef94d6c6e98a8bc4d849bf1e26e625a521935d526",
"md5": "6b6f91e1cb081a00132ec084b2c10bb3",
"sha256": "a6adacb2abbfd03b8bf3952e5b937dfafeeb8fcf46344684942ddb57005bc935"
},
"downloads": -1,
"filename": "permission_manager_drf-0.2.0-py3-none-any.whl",
"has_sig": false,
"md5_digest": "6b6f91e1cb081a00132ec084b2c10bb3",
"packagetype": "bdist_wheel",
"python_version": "py3",
"requires_python": "<4.0,>=3.10",
"size": 6725,
"upload_time": "2024-05-15T23:05:36",
"upload_time_iso_8601": "2024-05-15T23:05:36.949395Z",
"url": "https://files.pythonhosted.org/packages/a9/15/600593a6a121c826b1cef94d6c6e98a8bc4d849bf1e26e625a521935d526/permission_manager_drf-0.2.0-py3-none-any.whl",
"yanked": false,
"yanked_reason": null
},
{
"comment_text": "",
"digests": {
"blake2b_256": "7882e04511366a53fcf29f376ae255b6f56339ce93667e8ba978115a68425ff9",
"md5": "bf1f5f917c3934f4340585818935cfe0",
"sha256": "d62681bc0a9ae1bbf75c034642e352a0a516417d39c7e308c469da7c79a7824d"
},
"downloads": -1,
"filename": "permission_manager_drf-0.2.0.tar.gz",
"has_sig": false,
"md5_digest": "bf1f5f917c3934f4340585818935cfe0",
"packagetype": "sdist",
"python_version": "source",
"requires_python": "<4.0,>=3.10",
"size": 5196,
"upload_time": "2024-05-15T23:05:38",
"upload_time_iso_8601": "2024-05-15T23:05:38.406788Z",
"url": "https://files.pythonhosted.org/packages/78/82/e04511366a53fcf29f376ae255b6f56339ce93667e8ba978115a68425ff9/permission_manager_drf-0.2.0.tar.gz",
"yanked": false,
"yanked_reason": null
}
],
"upload_time": "2024-05-15 23:05:38",
"github": true,
"gitlab": false,
"bitbucket": false,
"codeberg": false,
"github_user": "kindlycat",
"github_project": "permission-manager-drf",
"travis_ci": false,
"coveralls": false,
"github_actions": true,
"lcname": "permission-manager-drf"
}