Skip to content

Permissions

Saffier includes a Python-native permission contrib built around an abstract BasePermission model and a dedicated PermissionManager.

Base Permission Model

import saffier
from saffier.contrib.permissions import BasePermission


class User(saffier.Model):
    name = saffier.CharField(max_length=100)

    class Meta:
        registry = models


class Group(saffier.Model):
    name = saffier.CharField(max_length=100)
    users = saffier.ManyToMany("User")

    class Meta:
        registry = models


class Permission(BasePermission):
    users = saffier.ManyToMany("User")
    groups = saffier.ManyToMany("Group")

    class Meta:
        registry = models

BasePermission provides:

  • name: permission name.
  • description: computed field with overridable getter/setter.
  • query: PermissionManager.

Manager Helpers

The manager exposes helpers for common ACL queries:

  • permissions_of(source_or_sources): permissions assigned to users/groups.
  • users(permissions, model_names=None, objects=None): users with effective permissions.
  • groups(permissions, model_names=None, objects=None): groups with permissions.

These methods return querysets, so you can keep chaining filters/orderings.