Skip to main content

Authorization library for Django

Project description

django-cancango

django-cancango is an authorization library for Django. It works on top of default Django permissions and allows to restrict the resources (models and objects) a given user can access.

This library is inspiered by cancancan for Ruby on Rails.

Quick start

  1. Add cancango to your INSTALLED_APPS setting like this:
INSTALLED_APPS = [
    ...,
    'cancango',
]
  1. Create a function that define user abilites. For example, in abilities.py:
def declare_abilities(user, ability):
    if not user.is_authenticated:
        # Allow anonymous users to view published articles
        return ability.can('view', Article, published=True)

    if user.has_perm('article.view_own_article'):
        # Allow logged in user to change his articles
        return ability.can('change', Article, author=user)

    if user.is_superuser:
        # Allow superuser change all articles
        return ability.can('change', Article)
  1. Configure cancango by adding CANCANGO section in settings.py:
CANCANGO = {
    'ABILITIES': 'myapp.abilities.declare_abilities'
}

Next, add cancango middleware after AuthenticationMiddleware:

MIDDLEWARE = [
    ...
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'cancango.middleware.CanCanGoMiddleware',
    ...
]

Adding the middleware adds request.user.can(...) function that you can use to check for model or object permissions.

  1. Check abilities in a view:
class ArticleDetailView(PermissionRequiredMixin, DetailView):
    queryset = TodoItem.objects.all()

    def has_permission(self):
        article = self.get_object()
        return self.request.user.can('view', article)

Testing

Run ./manage.py test to run all test for the testapp

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

django-cancan-0.0.1.tar.gz (8.1 kB view hashes)

Uploaded Source

Built Distribution

django_cancan-0.0.1-py3-none-any.whl (13.5 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page