How can I use Django permissions without defining a content type or model?

Issue

I’d like to use a permissions based system to restrict certain actions within my Django application. These actions need not be related to a particular model (e.g. access to sections in the application, searching…), so I can’t use the stock permissions framework directly, because the Permission model requires a reference to an installed content type.

I could write my own permission model but then I’d have to rewrite all the goodies included with the Django permissions, such as:

I’ve checked some apps like django-authority and django-guardian, but they seem to provide permissions even more coupled to the model system, by allowing per-object permissions.

Is there a way to reuse this framework without having defined any model (besides User and Group) for the project?

Solution

Django’s Permission model requires a ContentType instance.

I think one way around it is creating a dummy ContentType that isn’t related to any model (the app_label and model fields can be set to any string value).

If you want it all clean and nice, you can create a Permission proxy model that handles all the ugly details of the dummy ContentType and creates “modelless” permission instances. You can also add a custom manager that filters out all Permission instances related to real models.

Answered By – Gonzalo

This Answer collected from stackoverflow, is licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0

Leave a Reply

(*) Required, Your email will not be published