Skip to main content

Role and permission management for Django projects.

Project description

django-minosse

Role-based access control for Django, without the extra database tables.

django-minosse lets you define roles as Python classes, sync them to Django's built-in Group model, and protect views with decorators or mixins — all on top of the django.contrib.auth machinery you already have.


Requirements

  • Python 3.12+
  • Django 5.0+

Installation

pip install django-minosse

or with uv:

uv add django-minosse

No changes to INSTALLED_APPS are needed. django-minosse relies on django.contrib.auth and django.contrib.contenttypes, which are already present in every Django project. Run python manage.py migrate at least once so the auth tables exist before calling sync() or get_group().

Quick start

1. Define roles

# myapp/roles.py
from minosse.roles import AbstractRole, RoleRegistry

registry = RoleRegistry()

@registry.register
class EditorRole(AbstractRole):
    group_name = "Editors"
    available_permissions = {
        "can_publish": True,
        "can_edit": True,
        "can_delete": False,
    }

@registry.register
class ViewerRole(AbstractRole):
    group_name = "Viewers"
    available_permissions = {
        "can_view_reports": True,
    }

2. Sync roles to the database

from myapp.roles import registry

registry.sync()   # call from a management command or AppConfig.ready()

3. Protect views

Function-based views:

from django.contrib.auth.decorators import login_required
from minosse.decorator import role_required, permission_required
from .roles import EditorRole

@login_required
@role_required(EditorRole)
def editor_dashboard(request):
    ...

@login_required
@permission_required("can_publish")
def publish_article(request, pk):
    ...

Class-based views:

from django.views.generic import TemplateView
from minosse.mixin import RoleRequiredMixin, PermissionRequiredMixin
from .roles import EditorRole

class EditorDashboardView(RoleRequiredMixin, TemplateView):
    required_role_class = EditorRole
    template_name = "editor/dashboard.html"

class PublishView(PermissionRequiredMixin, TemplateView):
    required_permission_codename = "can_publish"
    template_name = "editor/publish.html"

4. Manage role membership

# Assign / remove
EditorRole.add_user_to_role(user)
EditorRole.remove_user_from_role(user)

# Check
if EditorRole.user_has_role(user):
    ...

Features

  • Define roles as Python classes with declarative permission sets
  • Sync roles and permissions to Django's Group / Permission models
  • Protect function-based views with @role_required and @permission_required
  • Protect class-based views with RoleRequiredMixin and PermissionRequiredMixin
  • Check roles and permissions in templates with |has_role and |has_perm filters
  • Register roles centrally via RoleRegistry for bulk sync

Documentation

Full documentation is available in the docs/ directory and can be served locally:

make docs-serve

License

MIT

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_minosse-1.1.0.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

django_minosse-1.1.0-py3-none-any.whl (6.4 kB view details)

Uploaded Python 3

File details

Details for the file django_minosse-1.1.0.tar.gz.

File metadata

  • Download URL: django_minosse-1.1.0.tar.gz
  • Upload date:
  • Size: 9.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for django_minosse-1.1.0.tar.gz
Algorithm Hash digest
SHA256 b77bfb65e3a6d25e1319f0d72b71e1e21dd902e2db67ef35bdbb1c4a4ae33f84
MD5 23a7d507b01db3cb99be5c9444e8d730
BLAKE2b-256 944afdd5f186c11d8ee1a89c0b632962669d45e2d3a33e31a6508b7a1473c7a2

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_minosse-1.1.0.tar.gz:

Publisher: publish.yml on fundor333/django-minosse

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file django_minosse-1.1.0-py3-none-any.whl.

File metadata

  • Download URL: django_minosse-1.1.0-py3-none-any.whl
  • Upload date:
  • Size: 6.4 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for django_minosse-1.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 23415834dc953b17b2a150244fc5e2f48c31c7d9466dcb152b14f0fb90299af5
MD5 d6edb53fff8c81bc3ce4f851713d5946
BLAKE2b-256 deeaef62fc2a7e49abafb094c4fd652fe88758e5ced3a33a9207d5af897c357d

See more details on using hashes here.

Provenance

The following attestation bundles were made for django_minosse-1.1.0-py3-none-any.whl:

Publisher: publish.yml on fundor333/django-minosse

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

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