Skip to main content

CASL Django is an app that converts the usual Django permissions to CASL-Style rules.

CASL is an isomorphic authorization JavaScript library: https://github.com/stalniy/casl/

Example

Having a rule called my_app.change_item, will generate a CASL rule:

{
    subject: 'my_app/item',
    action: 'change'
}

If you have more than one rule for the same subject, for example:

my_app.change_item
my_app.add_item
my_app.remove_item

This will generate:

{
    subject: 'my_app/item',
    actions: ['add', 'change', 'remove']
}

Configuration

By default, the length for subject and action fields is 128 characters, you can increase the length of them by adding to your settings file:

CASL_DJANGO = {
    'subject-length': 256,
    'action-length': 256
}

Custom Permissions

Sometimes you’d like to have custom permissions for your users, given this, you can add to your user using the Permission’s add_permission class method:

from casl_django.casl.permissions import Permissions

...

my_custom_permission = Permissions.create(subject="navigation", action="index")

...

Permissions.set_user_permission(user=user, permission=my_custom_permission)

Or you can import casl_django.models.UserPermission and create objects as desired.

Quick start

  1. Add “casl_django” to your INSTALLED_APPS setting like this:

    INSTALLED_APPS = [
        ...
        'casl_django',
    ]
  2. Run python manage.py migrate to create the models.

API

By default, your user object should contain a related relationship called casl_permissions. You can filter by permission__subject and permission__action and finally get the rules with the queryset method bundle().

bundle()

This method it’s included in the QuerySet’s for UserPermissions (user.casl_permissions) and for CASLPermission (CASLPermission.objects).

This method returns a list like the following:

[
    // These are regular django permissions transformed to CASL-Style rules
    {'subject': 'products/item', actions: ['add', 'change']},
    // These are CASLPermissions objects
    {'subject': 'navigation', actions: ['index', 'products']}
]

The bundle consists in grouping same-subject rules and the actions, having less data to send over the wire.

Metadata

Release files for casl-django 0.4.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for casl-django 0.4.3
File Size Uploaded
casl-django-0.4.3.tar.gz 11.2 kB Details

Release files / casl-django-0.4.3.tar.gz

Download URL casl-django-0.4.3.tar.gz
Size 11.2 kB
Tags Source
SHA-256 checksum
How to use checksums
760cdee3c32b491e136c4e37bd6a4616c3b95d3e74c62e6c105a53999404b92d
BLAKE2b-256 checksum
How to use checksums
75ee6aea39a34a514aa9784624eac94a876c7d2352a1ece9b05d506d11240b34
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/1.12.1 pkginfo/1.4.2 requests/2.20.1 setuptools/40.6.3 requests-toolbelt/0.8.0 tqdm/4.28.1 CPython/3.7.1

Release history Release notifications | RSS feed

This release

0.4.3 This release

1 release file

0.4.2

1 release file

0.4.1

1 release file

0.4.0

1 release file

0.3.1

1 release file

0.3

1 release file

0.2

1 release file

0.1

1 release file

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page