mirror of
https://gitlab2.federez.net/re2o/re2o
synced 2024-12-23 15:33:45 +00:00
Premier jet de décorateur can_edit
This commit is contained in:
parent
aceb6a9e4a
commit
50ea71d8e9
1 changed files with 29 additions and 0 deletions
|
@ -41,6 +41,7 @@ from django.utils import timezone
|
|||
from django.db.models import Q
|
||||
from django.contrib import messages
|
||||
from django.shortcuts import redirect
|
||||
from django.urls import reverse
|
||||
|
||||
from cotisations.models import Cotisation, Facture, Paiement, Vente
|
||||
from machines.models import Domain, Interface, Machine
|
||||
|
@ -67,6 +68,34 @@ def can_create(model):
|
|||
return decorator
|
||||
|
||||
|
||||
def can_edit(model, *instance_id):
|
||||
"""Decorator to check if an user can edit a model.
|
||||
It assumes that a valid user exists in the request and that the model has a
|
||||
method can_create(user) which returns true if the user can create this kind
|
||||
of models.
|
||||
"""
|
||||
def decorator(view):
|
||||
def wrapper(request, *args, **kwargs):
|
||||
instances = {}
|
||||
for i in instance_id:
|
||||
try:
|
||||
instances[i] = model.objects.get(pk=i)
|
||||
except model.DoesNotExist:
|
||||
messages.error(request, u"Entrée inexistante")
|
||||
return redirect(reverse('users:index'))
|
||||
kwargs['instances'] = instances
|
||||
can = all(model.can_edit(request, instances[i]) for i in instances)
|
||||
if not can:
|
||||
messages.error(request, "Vous ne pouvez pas accéder à ce menu")
|
||||
return redirect(reverse('users:profil',
|
||||
kwargs={'userid':str(request.user.id)}
|
||||
))
|
||||
return view(request, *args, **kwargs)
|
||||
return wrapper
|
||||
return decorator
|
||||
|
||||
|
||||
|
||||
def all_adherent(search_time=DT_NOW):
|
||||
""" Fonction renvoyant tous les users adherents. Optimisee pour n'est
|
||||
qu'une seule requete sql
|
||||
|
|
Loading…
Reference in a new issue