Skip to main content

About

django_callable_perms implements a modular registry of permission handlers. Handlers can be registered as simple permission callbacks, following the Django has_perm parameters.

All permission callbacks may implement the permission checks they need. As we talk about callbacks, meaning executable code, you can put everything you need in there.

Example

Django itself misses support for row level permissions. You may add this using authentication backends and there are existing apps to implement this. Anyways most of these solutions will add some overhead and cannot provide really flexible permissions.

django_callable_perms do not care about which permissions you want to implement but fit row level permissions really well. So lets start with the real example. Given a model like this:

class Article(models.Model):
    title = models.CharField(max_length=100)
    author = models.ForeignKey(User)

You may want to add permissions checks, so only the author is allowed to edit his/her articles. Now django_callable_perms may be used to add simple checks like the following:

# may be put into permissions.py inside the app
from django_callable_perms import register
from .models import Article


def author_may_always_edit(user, perm, obj):
    # no additional database query needed!
    if obj.author_id == user.pk:
        return True


register(
    'app.change_article', # permission name
    author_may_always_edit, # callback function
    Article, # model, for which the permission check is implemented
             # may be "None", if no instance is required
)

Permission checks afterwards just follow default Django behavior. Use {% get_obj_perms %} inside templates.

{% get_obj_perms for user accessing obj as obj_perms %}
{% if obj_perms.app.change_article %}
    {# show edit link #}
    <a href="...">Edit</a>
{% endif %}

Note: If you need your own permissions you do not need to add them to the database (see Django docs), most of the time it’s enough to just register the new permissions.

Installation

Add django_callable_perms to INSTALLED_APPS (for autoloading) and add django_callable_perms.backends.CallablePermissionBackend to your AUTHENTICATION_BACKENDS.

Make sure to put django_callable_perms into your Python PATH first, of course.

Additional Features

Autoloading

Will load all permissions.py’s inside the INSTALLED_APPS.

sync_permissions

Management command to create all app permission inside the database. May be used to initialize the database. Will not (meaning never) add more than the default Django permissions.

Metadata

Release files for django_callable_perms 0.1.2

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

Source distribution (sdist)

Source distribution for django_callable_perms 0.1.2
File Size Uploaded Provenance
django_callable_perms-0.1.2.tar.gz 4.6 kB Without provenance Details

Release files / django_callable_perms-0.1.2.tar.gz

Download URL django_callable_perms-0.1.2.tar.gz
Size 4.6 kB
Tags Source
SHA-256 checksum
How to use checksums
e61ce37faad74f3c90512dba442b70e4c811e9464c7791697650d52260967998
BLAKE2b-256 checksum
How to use checksums
e69e80490e9fc9a9f6bb5222f51c1190941cc3dd744cc0f07c3112c092403e7e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No

Security for django_callable_perms 0.1.2

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

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