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 %}
{% if post %}
{% if success %}
Nouveau compte créé : {{ trigramme }}
{% else %}
Echec de la création du compte
{{ errors }}
{% endif %}
<hr>
{% endif %}
{% include 'kfet/base_messages.html' %}
<form action="{% url "kfet.account.create" %}" method="post">
{{ account_trigramme_form }}

View file

@ -2,6 +2,7 @@ from django.conf.urls import url
from django.contrib.auth.decorators import permission_required
from kfet import views
from kfet import autocomplete
from kfet.decorators import teamkfet_required
urlpatterns = [
url(r'^$', views.home,
@ -61,34 +62,34 @@ urlpatterns = [
# Checkout - General
url('^checkouts/$',
permission_required('kfet.is_team')(views.CheckoutList.as_view()),
teamkfet_required(views.CheckoutList.as_view()),
name = 'kfet.checkout'),
# Checkout - Create
url('^checkouts/new$',
permission_required('kfet.is_team')(views.CheckoutCreate.as_view()),
teamkfet_required(views.CheckoutCreate.as_view()),
name = 'kfet.checkout.create'),
# Checkout - Read
url('^checkouts/(?P<pk>\d+)$',
permission_required('kfet.is_team')(views.CheckoutRead.as_view()),
teamkfet_required(views.CheckoutRead.as_view()),
name = 'kfet.checkout.read'),
# Checkout - Update
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'),
### Checkout Statements urls
# Checkout Statement - General
url('^checkouts/statements/$',
permission_required('kfet.is_team')(views.CheckoutStatementList.as_view()),
teamkfet_required(views.CheckoutStatementList.as_view()),
name = 'kfet.checkoutstatement'),
# Checkout Statement - Create
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'),
# Checkout Statement - Update
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'),
# -----
@ -97,19 +98,19 @@ urlpatterns = [
# Article - General
url('^articles/$',
permission_required('kfet.is_team')(views.ArticleList.as_view()),
teamkfet_required(views.ArticleList.as_view()),
name = 'kfet.article'),
# Article - Create
url('^articles/new$',
permission_required('kfet.is_team')(views.ArticleCreate.as_view()),
teamkfet_required(views.ArticleCreate.as_view()),
name = 'kfet.article.create'),
# Article - Read
url('^articles/(?P<pk>\d+)$',
permission_required('kfet.is_team')(views.ArticleRead.as_view()),
teamkfet_required(views.ArticleRead.as_view()),
name = 'kfet.article.read'),
# Article - Update
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'),
# -----
@ -167,12 +168,12 @@ urlpatterns = [
# -----
url(r'^inventaires/$',
permission_required('kfet.is_team')(views.InventoryList.as_view()),
teamkfet_required(views.InventoryList.as_view()),
name = 'kfet.inventory'),
url(r'^inventaires/new$', views.inventory_create,
name = 'kfet.inventory.create'),
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'),
# -----
@ -180,13 +181,13 @@ urlpatterns = [
# -----
url(r'^orders/$',
permission_required('kfet.is_team')(views.OrderList.as_view()),
teamkfet_required(views.OrderList.as_view()),
name = 'kfet.order'),
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'),
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'),
url(r'^orders/suppliers/(?P<pk>\d+)/new-order$', views.order_create,
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.crypto import get_random_string
from gestioncof.models import CofProfile, Clipper
from kfet.decorators import teamkfet_required
from kfet.models import (Account, Checkout, Article, Settings, AccountNegative,
CheckoutStatement, GenericTeamToken, Supplier, SupplierArticle, Inventory,
InventoryArticle, Order, OrderArticle)
@ -32,7 +33,7 @@ import statistics
def home(request):
return render(request, "kfet/base.html")
@permission_required('kfet.is_team')
@teamkfet_required
def login_genericteam(request):
profile, _ = CofProfile.objects.get_or_create(user=request.user)
logout_cas = ''
@ -59,13 +60,13 @@ def put_cleaned_data_in_dict(dict, form):
# Account - General
@login_required
@permission_required('kfet.is_team')
@teamkfet_required
def account(request):
accounts = Account.objects.select_related('cofprofile__user').order_by('trigramme')
return render(request, "kfet/account.html", { 'accounts' : accounts })
@login_required
@permission_required('kfet.is_team')
@teamkfet_required
def account_is_validandfree_ajax(request):
if not request.GET.get("trigramme", ''):
raise Http404
@ -76,7 +77,7 @@ def account_is_validandfree_ajax(request):
# Account - Create
@login_required
@permission_required('kfet.is_team')
@teamkfet_required
def account_create(request):
# 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
@login_required
@permission_required('kfet.is_team')
@teamkfet_required
def account_create_ajax(request, username=None, login_clipper=None):
user = None
if login_clipper:
@ -664,7 +665,7 @@ class ArticleUpdate(SuccessMessageMixin, UpdateView):
# K-Psul
# -----
@permission_required('kfet.is_team')
@teamkfet_required
def kpsul(request):
data = {}
data['operationgroup_form'] = KPsulOperationGroupForm()
@ -674,7 +675,7 @@ def kpsul(request):
data['operation_formset'] = operation_formset
return render(request, 'kfet/kpsul.html', data)
@permission_required('kfet.is_team')
@teamkfet_required
def kpsul_get_settings(request):
addcost_for = Settings.ADDCOST_FOR()
data = {
@ -684,7 +685,7 @@ def kpsul_get_settings(request):
}
return JsonResponse(data)
@permission_required('kfet.is_team')
@teamkfet_required
def account_read_json(request):
trigramme = request.POST.get('trigramme', '')
account = get_object_or_404(Account, trigramme=trigramme)
@ -695,7 +696,7 @@ def account_read_json(request):
'trigramme': account.trigramme }
return JsonResponse(data)
@permission_required('kfet.is_team')
@teamkfet_required
def kpsul_checkout_data(request):
pk = request.POST.get('pk', 0)
try:
@ -722,7 +723,7 @@ def kpsul_checkout_data(request):
raise http404
return JsonResponse(data)
@permission_required('kfet.is_team')
@teamkfet_required
def kpsul_update_addcost(request):
addcost_form = AddcostForm(request.POST)
@ -762,7 +763,7 @@ def get_missing_perms(required_perms, user):
.values_list('name', flat=True))
return missing_perms
@permission_required('kfet.is_team')
@teamkfet_required
def kpsul_perform_operations(request):
# Initializing response data
data = { 'operationgroup': 0, 'operations': [],
@ -950,7 +951,7 @@ def kpsul_perform_operations(request):
consumers.KPsul.group_send('kfet.kpsul', websocket_data)
return JsonResponse(data)
@permission_required('kfet.is_team')
@teamkfet_required
def kpsul_cancel_operations(request):
# Pour la réponse
data = { 'canceled': [], 'warnings': {}, 'errors': {}}
@ -1188,7 +1189,7 @@ def history_json(request):
opegroups_list.append(opegroup_dict)
return JsonResponse({ 'opegroups': opegroups_list })
@permission_required('kfet.is_team')
@teamkfet_required
def kpsul_articles_data(request):
articles = (
Article.objects
@ -1196,7 +1197,7 @@ def kpsul_articles_data(request):
.filter(is_sold=True))
return JsonResponse({ 'articles': list(articles) })
@permission_required('kfet.is_team')
@teamkfet_required
def history(request):
data = {
'filter_form': FilterHistoryForm(),
@ -1239,7 +1240,7 @@ class SettingsUpdate(SuccessMessageMixin, UpdateView):
# Transfer views
# -----
@permission_required('kfet.is_team')
@teamkfet_required
def transfers(request):
transfergroups = (TransferGroup.objects
.prefetch_related('transfers')
@ -1248,13 +1249,13 @@ def transfers(request):
'transfergroups': transfergroups,
})
@permission_required('kfet.is_team')
@teamkfet_required
def transfers_create(request):
transfer_formset = TransferFormSet(queryset=Transfer.objects.none())
return render(request, 'kfet/transfers_create.html',
{ 'transfer_formset': transfer_formset })
@permission_required('kfet.is_team')
@teamkfet_required
def perform_transfers(request):
data = { 'errors': {}, 'transfers': [], 'transfergroup': 0 }
@ -1337,7 +1338,7 @@ class InventoryList(ListView):
template_name = 'kfet/inventory.html'
context_object_name = 'inventories'
@permission_required('kfet.is_team')
@teamkfet_required
def inventory_create(request):
articles = (Article.objects
@ -1428,7 +1429,7 @@ class OrderList(ListView):
context['suppliers'] = Supplier.objects.order_by('name')
return context
@permission_required('kfet.is_team')
@teamkfet_required
def order_create(request, pk):
supplier = get_object_or_404(Supplier, pk=pk)
@ -1596,6 +1597,7 @@ class OrderRead(DetailView):
context['mail'] = mail
return context
@teamkfet_required
def order_to_inventory(request, pk):
order = get_object_or_404(Order, pk=pk)