Création décorateur pour perm kfet.is_team

- Un accès sur une vue protégée nécessitant d'être de l'équipe envoie
  vers la page de connexion si l'utilisateur n'est pas connecté
This commit is contained in:
Aurélien Delobelle 2016-08-31 02:52:13 +02:00
parent 3444426114
commit e927ad5801
4 changed files with 45 additions and 44 deletions

6
kfet/decorators.py Normal file
View file

@ -0,0 +1,6 @@
from django_cas_ng.decorators import user_passes_test
def kfet_is_team(user):
return user.has_perm('kfet.is_team')
teamkfet_required = user_passes_test(lambda u: kfet_is_team(u))

View file

@ -11,15 +11,7 @@
{% block content %} {% block content %}
{% if post %} {% include 'kfet/base_messages.html' %}
{% if success %}
Nouveau compte créé : {{ trigramme }}
{% else %}
Echec de la création du compte
{{ errors }}
{% endif %}
<hr>
{% endif %}
<form action="{% url "kfet.account.create" %}" method="post"> <form action="{% url "kfet.account.create" %}" method="post">
{{ account_trigramme_form }} {{ account_trigramme_form }}

View file

@ -2,6 +2,7 @@ from django.conf.urls import url
from django.contrib.auth.decorators import permission_required from django.contrib.auth.decorators import permission_required
from kfet import views from kfet import views
from kfet import autocomplete from kfet import autocomplete
from kfet.decorators import teamkfet_required
urlpatterns = [ urlpatterns = [
url(r'^$', views.home, url(r'^$', views.home,
@ -61,34 +62,34 @@ urlpatterns = [
# Checkout - General # Checkout - General
url('^checkouts/$', url('^checkouts/$',
permission_required('kfet.is_team')(views.CheckoutList.as_view()), teamkfet_required(views.CheckoutList.as_view()),
name = 'kfet.checkout'), name = 'kfet.checkout'),
# Checkout - Create # Checkout - Create
url('^checkouts/new$', url('^checkouts/new$',
permission_required('kfet.is_team')(views.CheckoutCreate.as_view()), teamkfet_required(views.CheckoutCreate.as_view()),
name = 'kfet.checkout.create'), name = 'kfet.checkout.create'),
# Checkout - Read # Checkout - Read
url('^checkouts/(?P<pk>\d+)$', url('^checkouts/(?P<pk>\d+)$',
permission_required('kfet.is_team')(views.CheckoutRead.as_view()), teamkfet_required(views.CheckoutRead.as_view()),
name = 'kfet.checkout.read'), name = 'kfet.checkout.read'),
# Checkout - Update # Checkout - Update
url('^checkouts/(?P<pk>\d+)/edit$', url('^checkouts/(?P<pk>\d+)/edit$',
permission_required('kfet.is_team')(views.CheckoutUpdate.as_view()), teamkfet_required(views.CheckoutUpdate.as_view()),
name = 'kfet.checkout.update'), name = 'kfet.checkout.update'),
### Checkout Statements urls ### Checkout Statements urls
# Checkout Statement - General # Checkout Statement - General
url('^checkouts/statements/$', url('^checkouts/statements/$',
permission_required('kfet.is_team')(views.CheckoutStatementList.as_view()), teamkfet_required(views.CheckoutStatementList.as_view()),
name = 'kfet.checkoutstatement'), name = 'kfet.checkoutstatement'),
# Checkout Statement - Create # Checkout Statement - Create
url('^checkouts/(?P<pk_checkout>\d+)/statements/add', url('^checkouts/(?P<pk_checkout>\d+)/statements/add',
permission_required('kfet.is_team')(views.CheckoutStatementCreate.as_view()), teamkfet_required(views.CheckoutStatementCreate.as_view()),
name = 'kfet.checkoutstatement.create'), name = 'kfet.checkoutstatement.create'),
# Checkout Statement - Update # Checkout Statement - Update
url('^checkouts/(?P<pk_checkout>\d+)/statements/(?P<pk>\d+)/edit', url('^checkouts/(?P<pk_checkout>\d+)/statements/(?P<pk>\d+)/edit',
permission_required('kfet.is_team')(views.CheckoutStatementUpdate.as_view()), teamkfet_required(views.CheckoutStatementUpdate.as_view()),
name = 'kfet.checkoutstatement.update'), name = 'kfet.checkoutstatement.update'),
# ----- # -----
@ -97,19 +98,19 @@ urlpatterns = [
# Article - General # Article - General
url('^articles/$', url('^articles/$',
permission_required('kfet.is_team')(views.ArticleList.as_view()), teamkfet_required(views.ArticleList.as_view()),
name = 'kfet.article'), name = 'kfet.article'),
# Article - Create # Article - Create
url('^articles/new$', url('^articles/new$',
permission_required('kfet.is_team')(views.ArticleCreate.as_view()), teamkfet_required(views.ArticleCreate.as_view()),
name = 'kfet.article.create'), name = 'kfet.article.create'),
# Article - Read # Article - Read
url('^articles/(?P<pk>\d+)$', url('^articles/(?P<pk>\d+)$',
permission_required('kfet.is_team')(views.ArticleRead.as_view()), teamkfet_required(views.ArticleRead.as_view()),
name = 'kfet.article.read'), name = 'kfet.article.read'),
# Article - Update # Article - Update
url('^articles/(?P<pk>\d+)/edit$', url('^articles/(?P<pk>\d+)/edit$',
permission_required('kfet.is_team')(views.ArticleUpdate.as_view()), teamkfet_required(views.ArticleUpdate.as_view()),
name = 'kfet.article.update'), name = 'kfet.article.update'),
# ----- # -----
@ -167,12 +168,12 @@ urlpatterns = [
# ----- # -----
url(r'^inventaires/$', url(r'^inventaires/$',
permission_required('kfet.is_team')(views.InventoryList.as_view()), teamkfet_required(views.InventoryList.as_view()),
name = 'kfet.inventory'), name = 'kfet.inventory'),
url(r'^inventaires/new$', views.inventory_create, url(r'^inventaires/new$', views.inventory_create,
name = 'kfet.inventory.create'), name = 'kfet.inventory.create'),
url(r'^inventaires/(?P<pk>\d+)$', url(r'^inventaires/(?P<pk>\d+)$',
permission_required('kfet.is_team')(views.InventoryRead.as_view()), teamkfet_required(views.InventoryRead.as_view()),
name = 'kfet.inventory.read'), name = 'kfet.inventory.read'),
# ----- # -----
@ -180,13 +181,13 @@ urlpatterns = [
# ----- # -----
url(r'^orders/$', url(r'^orders/$',
permission_required('kfet.is_team')(views.OrderList.as_view()), teamkfet_required(views.OrderList.as_view()),
name = 'kfet.order'), name = 'kfet.order'),
url(r'^orders/(?P<pk>\d+)$', url(r'^orders/(?P<pk>\d+)$',
permission_required('kfet.is_team')(views.OrderRead.as_view()), teamkfet_required(views.OrderRead.as_view()),
name = 'kfet.order.read'), name = 'kfet.order.read'),
url(r'^orders/suppliers/(?P<pk>\d+)/edit$', url(r'^orders/suppliers/(?P<pk>\d+)/edit$',
permission_required('kfet.is_team')(views.SupplierUpdate.as_view()), teamkfet_required(views.SupplierUpdate.as_view()),
name = 'kfet.order.supplier.update'), name = 'kfet.order.supplier.update'),
url(r'^orders/suppliers/(?P<pk>\d+)/new-order$', views.order_create, url(r'^orders/suppliers/(?P<pk>\d+)/new-order$', views.order_create,
name = 'kfet.order.new'), name = 'kfet.order.new'),

View file

@ -17,6 +17,7 @@ from django.db.models.functions import Coalesce
from django.utils import timezone from django.utils import timezone
from django.utils.crypto import get_random_string from django.utils.crypto import get_random_string
from gestioncof.models import CofProfile, Clipper from gestioncof.models import CofProfile, Clipper
from kfet.decorators import teamkfet_required
from kfet.models import (Account, Checkout, Article, Settings, AccountNegative, from kfet.models import (Account, Checkout, Article, Settings, AccountNegative,
CheckoutStatement, GenericTeamToken, Supplier, SupplierArticle, Inventory, CheckoutStatement, GenericTeamToken, Supplier, SupplierArticle, Inventory,
InventoryArticle, Order, OrderArticle) InventoryArticle, Order, OrderArticle)
@ -32,7 +33,7 @@ import statistics
def home(request): def home(request):
return render(request, "kfet/base.html") return render(request, "kfet/base.html")
@permission_required('kfet.is_team') @teamkfet_required
def login_genericteam(request): def login_genericteam(request):
profile, _ = CofProfile.objects.get_or_create(user=request.user) profile, _ = CofProfile.objects.get_or_create(user=request.user)
logout_cas = '' logout_cas = ''
@ -59,13 +60,13 @@ def put_cleaned_data_in_dict(dict, form):
# Account - General # Account - General
@login_required @login_required
@permission_required('kfet.is_team') @teamkfet_required
def account(request): def account(request):
accounts = Account.objects.select_related('cofprofile__user').order_by('trigramme') accounts = Account.objects.select_related('cofprofile__user').order_by('trigramme')
return render(request, "kfet/account.html", { 'accounts' : accounts }) return render(request, "kfet/account.html", { 'accounts' : accounts })
@login_required @login_required
@permission_required('kfet.is_team') @teamkfet_required
def account_is_validandfree_ajax(request): def account_is_validandfree_ajax(request):
if not request.GET.get("trigramme", ''): if not request.GET.get("trigramme", ''):
raise Http404 raise Http404
@ -76,7 +77,7 @@ def account_is_validandfree_ajax(request):
# Account - Create # Account - Create
@login_required @login_required
@permission_required('kfet.is_team') @teamkfet_required
def account_create(request): def account_create(request):
# A envoyer au template # A envoyer au template
@ -134,7 +135,7 @@ def account_form_set_readonly_fields(user_form, cof_form):
cof_form.fields['is_cof'].widget.attrs['disabled'] = True cof_form.fields['is_cof'].widget.attrs['disabled'] = True
@login_required @login_required
@permission_required('kfet.is_team') @teamkfet_required
def account_create_ajax(request, username=None, login_clipper=None): def account_create_ajax(request, username=None, login_clipper=None):
user = None user = None
if login_clipper: if login_clipper:
@ -664,7 +665,7 @@ class ArticleUpdate(SuccessMessageMixin, UpdateView):
# K-Psul # K-Psul
# ----- # -----
@permission_required('kfet.is_team') @teamkfet_required
def kpsul(request): def kpsul(request):
data = {} data = {}
data['operationgroup_form'] = KPsulOperationGroupForm() data['operationgroup_form'] = KPsulOperationGroupForm()
@ -674,7 +675,7 @@ def kpsul(request):
data['operation_formset'] = operation_formset data['operation_formset'] = operation_formset
return render(request, 'kfet/kpsul.html', data) return render(request, 'kfet/kpsul.html', data)
@permission_required('kfet.is_team') @teamkfet_required
def kpsul_get_settings(request): def kpsul_get_settings(request):
addcost_for = Settings.ADDCOST_FOR() addcost_for = Settings.ADDCOST_FOR()
data = { data = {
@ -684,7 +685,7 @@ def kpsul_get_settings(request):
} }
return JsonResponse(data) return JsonResponse(data)
@permission_required('kfet.is_team') @teamkfet_required
def account_read_json(request): def account_read_json(request):
trigramme = request.POST.get('trigramme', '') trigramme = request.POST.get('trigramme', '')
account = get_object_or_404(Account, trigramme=trigramme) account = get_object_or_404(Account, trigramme=trigramme)
@ -695,7 +696,7 @@ def account_read_json(request):
'trigramme': account.trigramme } 'trigramme': account.trigramme }
return JsonResponse(data) return JsonResponse(data)
@permission_required('kfet.is_team') @teamkfet_required
def kpsul_checkout_data(request): def kpsul_checkout_data(request):
pk = request.POST.get('pk', 0) pk = request.POST.get('pk', 0)
try: try:
@ -722,7 +723,7 @@ def kpsul_checkout_data(request):
raise http404 raise http404
return JsonResponse(data) return JsonResponse(data)
@permission_required('kfet.is_team') @teamkfet_required
def kpsul_update_addcost(request): def kpsul_update_addcost(request):
addcost_form = AddcostForm(request.POST) addcost_form = AddcostForm(request.POST)
@ -762,7 +763,7 @@ def get_missing_perms(required_perms, user):
.values_list('name', flat=True)) .values_list('name', flat=True))
return missing_perms return missing_perms
@permission_required('kfet.is_team') @teamkfet_required
def kpsul_perform_operations(request): def kpsul_perform_operations(request):
# Initializing response data # Initializing response data
data = { 'operationgroup': 0, 'operations': [], data = { 'operationgroup': 0, 'operations': [],
@ -950,7 +951,7 @@ def kpsul_perform_operations(request):
consumers.KPsul.group_send('kfet.kpsul', websocket_data) consumers.KPsul.group_send('kfet.kpsul', websocket_data)
return JsonResponse(data) return JsonResponse(data)
@permission_required('kfet.is_team') @teamkfet_required
def kpsul_cancel_operations(request): def kpsul_cancel_operations(request):
# Pour la réponse # Pour la réponse
data = { 'canceled': [], 'warnings': {}, 'errors': {}} data = { 'canceled': [], 'warnings': {}, 'errors': {}}
@ -1188,7 +1189,7 @@ def history_json(request):
opegroups_list.append(opegroup_dict) opegroups_list.append(opegroup_dict)
return JsonResponse({ 'opegroups': opegroups_list }) return JsonResponse({ 'opegroups': opegroups_list })
@permission_required('kfet.is_team') @teamkfet_required
def kpsul_articles_data(request): def kpsul_articles_data(request):
articles = ( articles = (
Article.objects Article.objects
@ -1196,7 +1197,7 @@ def kpsul_articles_data(request):
.filter(is_sold=True)) .filter(is_sold=True))
return JsonResponse({ 'articles': list(articles) }) return JsonResponse({ 'articles': list(articles) })
@permission_required('kfet.is_team') @teamkfet_required
def history(request): def history(request):
data = { data = {
'filter_form': FilterHistoryForm(), 'filter_form': FilterHistoryForm(),
@ -1239,7 +1240,7 @@ class SettingsUpdate(SuccessMessageMixin, UpdateView):
# Transfer views # Transfer views
# ----- # -----
@permission_required('kfet.is_team') @teamkfet_required
def transfers(request): def transfers(request):
transfergroups = (TransferGroup.objects transfergroups = (TransferGroup.objects
.prefetch_related('transfers') .prefetch_related('transfers')
@ -1248,13 +1249,13 @@ def transfers(request):
'transfergroups': transfergroups, 'transfergroups': transfergroups,
}) })
@permission_required('kfet.is_team') @teamkfet_required
def transfers_create(request): def transfers_create(request):
transfer_formset = TransferFormSet(queryset=Transfer.objects.none()) transfer_formset = TransferFormSet(queryset=Transfer.objects.none())
return render(request, 'kfet/transfers_create.html', return render(request, 'kfet/transfers_create.html',
{ 'transfer_formset': transfer_formset }) { 'transfer_formset': transfer_formset })
@permission_required('kfet.is_team') @teamkfet_required
def perform_transfers(request): def perform_transfers(request):
data = { 'errors': {}, 'transfers': [], 'transfergroup': 0 } data = { 'errors': {}, 'transfers': [], 'transfergroup': 0 }
@ -1337,7 +1338,7 @@ class InventoryList(ListView):
template_name = 'kfet/inventory.html' template_name = 'kfet/inventory.html'
context_object_name = 'inventories' context_object_name = 'inventories'
@permission_required('kfet.is_team') @teamkfet_required
def inventory_create(request): def inventory_create(request):
articles = (Article.objects articles = (Article.objects
@ -1428,7 +1429,7 @@ class OrderList(ListView):
context['suppliers'] = Supplier.objects.order_by('name') context['suppliers'] = Supplier.objects.order_by('name')
return context return context
@permission_required('kfet.is_team') @teamkfet_required
def order_create(request, pk): def order_create(request, pk):
supplier = get_object_or_404(Supplier, pk=pk) supplier = get_object_or_404(Supplier, pk=pk)
@ -1596,6 +1597,7 @@ class OrderRead(DetailView):
context['mail'] = mail context['mail'] = mail
return context return context
@teamkfet_required
def order_to_inventory(request, pk): def order_to_inventory(request, pk):
order = get_object_or_404(Order, pk=pk) order = get_object_or_404(Order, pk=pk)