Dry Rest Permissions

raw JSON →
0.1.10 verified Fri May 01 auth: no python maintenance

Rules-based permissions for Django REST Framework, enabling complex permission logic through a declarative, rule-based approach. Current version 0.1.10, released Jun 15, 2020. Low release cadence, maintained as of latest commit Aug 2022.

pip install dry-rest-permissions
error ImportError: cannot import name 'DRYPermissions' from 'dry_rest_permissions'
cause Incorrect import path; DRYPermissions is in the 'generics' submodule.
fix
Use: from dry_rest_permissions.generics import DRYPermissions
error AttributeError: 'MyModel' object has no attribute 'DRYMeta'
cause Model lacks DRYMeta inner class required for permissions.
fix
Add a DRYMeta class to your model with read_permissions and write_permissions methods.
breaking DRYPermissions requires explicit permissions defined on model class; if no DRYMeta with permissions is defined, all requests are denied.
fix Define a DRYMeta inner class on your model with read_permissions and write_permissions callable.
gotcha The 'request.user' is not automatically available in permissions callables; you must pass it explicitly via the kwargs.
fix Use signature: def permission_function(user, obj=None): ... and DRYPermissions will pass request.user.
deprecated The 'dry_rest_permissions.generics.DRYGlobalPermissions' class behavior may change in future releases; prefer using DRYPermissions with global permission logic.
fix Use DRYPermissions and implement global check in write_permissions/read_permissions with obj=None.

Apply DRYPermissions to a viewset. Define permissions via 'read_permissions' and 'write_permissions' on model's DRYMeta class.

from rest_framework import viewsets
from myapp.models import MyModel
from myapp.serializers import MyModelSerializer
from dry_rest_permissions.generics import DRYPermissions

class MyModelViewSet(viewsets.ModelViewSet):
    queryset = MyModel.objects.all()
    serializer_class = MyModelSerializer
    permission_classes = (DRYPermissions,)