{"id":23639,"library":"dry-rest-permissions","title":"Dry Rest Permissions","description":"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.","status":"maintenance","version":"0.1.10","language":"python","source_language":"en","source_url":"https://github.com/Helioscene/dry-rest-permissions","tags":["django","django-rest-framework","permissions","authorization"],"install":[{"cmd":"pip install dry-rest-permissions","lang":"bash","label":"Install via pip"}],"dependencies":[{"reason":"Framework dependency","package":"django","optional":false},{"reason":"Required for DRF integration","package":"djangorestframework","optional":false}],"imports":[{"wrong":"from dry_rest_permissions.generics import DRYPermissions","symbol":"DRYPermissions","correct":"from dry_rest_permissions import DRYPermissions"}],"quickstart":{"code":"from rest_framework import viewsets\nfrom myapp.models import MyModel\nfrom myapp.serializers import MyModelSerializer\nfrom dry_rest_permissions.generics import DRYPermissions\n\nclass MyModelViewSet(viewsets.ModelViewSet):\n    queryset = MyModel.objects.all()\n    serializer_class = MyModelSerializer\n    permission_classes = (DRYPermissions,)\n","lang":"python","description":"Apply DRYPermissions to a viewset. Define permissions via 'read_permissions' and 'write_permissions' on model's DRYMeta class."},"warnings":[{"fix":"Define a DRYMeta inner class on your model with read_permissions and write_permissions callable.","message":"DRYPermissions requires explicit permissions defined on model class; if no DRYMeta with permissions is defined, all requests are denied.","severity":"breaking","affected_versions":"all"},{"fix":"Use signature: def permission_function(user, obj=None): ... and DRYPermissions will pass request.user.","message":"The 'request.user' is not automatically available in permissions callables; you must pass it explicitly via the kwargs.","severity":"gotcha","affected_versions":"0.1.0+"},{"fix":"Use DRYPermissions and implement global check in write_permissions/read_permissions with obj=None.","message":"The 'dry_rest_permissions.generics.DRYGlobalPermissions' class behavior may change in future releases; prefer using DRYPermissions with global permission logic.","severity":"deprecated","affected_versions":"<=0.1.10"}],"env_vars":null,"search_vec":"'0.1.10':25 '15':28 '2020':29 '2022':39 'approach':22 'aug':38 'author':46 'base':6,21 'cadenc':32 'commit':37 'complex':13 'current':23 'declar':18 'django':9,40,42 'django-rest-framework':41 'dri':1 'enabl':12 'framework':11,44 'jun':27 'latest':36 'logic':15 'low':30 'maintain':33 'permiss':3,7,14,45 'releas':26,31 'rest':2,10,43 'rule':5,20 'rule-bas':19 'rules-bas':4 'version':24","created_at":"2026-05-01T08:08:50.175168+00:00","updated_at":"2026-05-01T08:08:50.175168+00:00","problems":{"verify_error":"Traceback (most recent call last):\n  File \"<string>\", line 1, in <module>\nImportError: cannot import name 'DRYPermissions' from 'dry_rest_permissions' (/tmp/tmp75twum90/venv/lib/python3.12/site-packages/dry_rest_permissions/__init__.py)"},"ecosystem":"pypi","meta_description":null,"install_score":null,"quickstart_score":null,"quickstart_tag":null,"pypi_latest":"0.1.10","cli_name":"","cli_version":null,"type":"library","homepage":null,"github":"https://github.com/Helioscene/dry-rest-permissions","docs":null,"changelog":null,"pypi":"https://pypi.org/project/dry-rest-permissions/","npm":null,"openapi_spec":null,"status_page":null,"smithery":null,"categories":["web-framework","auth-security"],"base_url":null,"auth_type":null,"provenance":{"verified_status":"import_fail","verified_at":"2026-07-03","last_verified":"2026-07-03","next_check":"2026-07-10","install_tag":null}}