Django : autorisations sur mesure – custom authorizations
Voici comment créer manuellement des groupes + des autorisations personnalisées :
from django.contrib.auth.models import Group, Permission
from django.contrib.contenttypes.models import ContentType
from django.contrib.auth.models import User
new_group, created = Group.objects.get_or_create(
name ='co_branding_trainer')
ct = ContentType.objects.get_for_model(User)
permission_co_branding_trainer = Permission.objects.create(
codename='co_branding_trainer',
name='Co-branding trainer', content_type=ct)
new_group.permissions.add(permission_co_branding_trainer)
Une fois cela fait, on a deux possibilités :
- aller dans le template et se servir de
{% if perms.app_label.can_do_something %}
{% endif %} - ou modifier le code vue dans le fichier Python. Dans ce cas, on n’a rien dans le template et si la personne connectée n’a pas les droits, la vue fait un
forbidden
Comme je préfère la seconde (qui évite d’avoir dans le template des « if
» un peu partout), voici comment faire : on crée un mixin qui se chargera de vérifier si, dans la vue, on a les droits : il suffit de chercher PermissionRequiredMixin
dans le code de Django, et vous verrez que tout est simple, à partir de là vous pourrez faire descendre vos vues génériques de PermissionRequiredMixin
.