Bridgekeeper
raw JSON → 0.9 verified Mon Apr 27 auth: no python
Bridgekeeper is a Django permissions library that allows rules to be defined as QuerySet filters, enabling efficient, database-level permission checks. Current version is 0.9, compatible with Python >=3.5 and Django 2.0+. Released under MIT License; maintained irregularly with no recent updates.
pip install bridgekeeper Common errors
error AttributeError: module 'bridgekeeper' has no attribute 'rules' ↓
cause Importing rules from the wrong location or outdated library version.
fix
Use 'from bridgekeeper import rules' (available since 0.8). Upgrade: pip install --upgrade bridgekeeper
error django.core.exceptions.ImproperlyConfigured: The PERMISSIONS setting must be a dict. ↓
cause PERMISSIONS not defined or set incorrectly in Django settings.
fix
Add 'PERMISSIONS = {}' to settings.py, even if empty.
Warnings
gotcha Bridgekeeper expects a dictionary named PERMISSIONS in Django settings. If not defined, no permissions are registered. ↓
fix Define PERMISSIONS in settings.py, e.g., PERMISSIONS = {'my_perm': my_permission}
gotcha Rules in Bridgekeeper are applied as QuerySet filters, not as Python predicates. Mixing logic that cannot be expressed as a filter will cause unexpected behavior. ↓
fix Ensure rules return Q objects or booleans that can be translated to database filters.
deprecated Bridgekeeper does not actively support Django 4.x or later; test compatibility before upgrading. ↓
fix Consider alternative libraries like django-guardian or django-rules for newer Django versions.
Imports
- Permission
from bridgekeeper import Permission - rules
from bridgekeeper import rules - is_staff wrong
from bridgekeeper import is_staffcorrectfrom bridgekeeper.rules import is_staff
Quickstart
import os
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')
import django
django.setup()
from bridgekeeper import Permission
from bridgekeeper.rules import is_authenticated
# Define a simple permission
view_dashboard = Permission(
'view_dashboard',
is_authenticated
)
# In Django settings, define PERMISSIONS dict
# PERMISSIONS = {'view_dashboard': view_dashboard}