django-bop

Basic Object-level Permissions in django (1.2+)


Keywords
django, object, level, permissions
License
BSD-3-Clause
Install
pip install django-bop==0.3

Documentation

django-bop

Django-bop provides Basic Object-level Permissions for django 1.2 and later. It is based on the django-advent article 'Object Permissions' by Florian Apolloner.

Although there are a few other permission backends I wanted a simple(r) backend that closely matches the existing django functionality.

Features

Django-bop provides several mechanisms to manage and check the permissions for objects:

  • bop.admin.ObjectAdmin
  • bop.forms.inline_permissions_form_factory
  • api.grant and api.revoke
  • bop.backends.ObjectBackend
  • ifhasperm templatetag
  • bop.managers.UserObjectManager
  • bop.managers.ObjectPermissionManager

Also of interest:

  • has_model_perms

Installation

Install it in your (virtual) environment:

$ pip install django-bop

If you haven't already you should also install south:

$ pip install South

Add 'bop' (and south) to you INSTALLED_APPS in settings.py:

INSTALLED_APPS = (
  ...
  'south',
  'bop',
)

While in settings.py specify the AUTHENTICATION_BACKENDS:

AUTHENTICATION_BACKENDS = (
      'django.contrib.auth.backends.ModelBackend',
      'bop.backends.ObjectBackend',
)

If you, optionally, want to give permissions to anonymous users you should do the following:

  1. Add a user to contrib.auth.models.User to represent anonymous users (e.g. via the admin). Give it an appropriate name (anon / anonymous) so it easily recognized when assigning permissions.

  2. Add ANONYMOUS_USER_ID to settings.py:

    ANONYMOUS_USER_ID = 2
    

If, in addition -- and again optionally -- you want to support Model-permissions for anonymous users, you can add the AnonymousModelBackend:

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.ModelBackend',
    'bop.backends.AnonymousModelBackend',
    'bop.backends.ObjectBackend',
)

When all configuration is done, bring the database up to date:

$ ./manage.py migrate bop