forked from DGNum/gestioCOF
Authentification utilisateur standard équipe
- Un utilisateur ayant la perm `kfet.is_team` peut se déconnecter et connecter à la place un utilisateur `kfet_genericteam` ne disposant que de la permission `kfet.is_team` - Backend et vue associée à cette connexion créés
This commit is contained in:
parent
ddc81540c7
commit
6ec42edd60
7 changed files with 69 additions and 2 deletions
|
@ -1,6 +1,8 @@
|
||||||
import hashlib
|
import hashlib
|
||||||
|
|
||||||
from kfet.models import Account
|
from django.contrib.auth.models import User, Permission
|
||||||
|
from gestioncof.models import CofProfile
|
||||||
|
from kfet.models import Account, GenericTeamToken
|
||||||
|
|
||||||
class KFetBackend(object):
|
class KFetBackend(object):
|
||||||
def authenticate(self, request):
|
def authenticate(self, request):
|
||||||
|
@ -16,3 +18,19 @@ class KFetBackend(object):
|
||||||
return None
|
return None
|
||||||
|
|
||||||
return user
|
return user
|
||||||
|
|
||||||
|
class GenericTeamBackend(object):
|
||||||
|
def authenticate(self, username=None, token=None):
|
||||||
|
valid_token = GenericTeamToken.objects.get(token=token)
|
||||||
|
if username == 'kfet_genericteam' and valid_token:
|
||||||
|
user, created = User.objects.get_or_create(username='kfet_genericteam')
|
||||||
|
perm_is_team = Permission.objects.get(codename='is_team')
|
||||||
|
user.user_permissions.add(perm_is_team)
|
||||||
|
return user
|
||||||
|
return None
|
||||||
|
|
||||||
|
def get_user(self, user_id):
|
||||||
|
try:
|
||||||
|
return User.objects.get(pk=user_id)
|
||||||
|
except User.DoesNotExist:
|
||||||
|
return None
|
||||||
|
|
21
kfet/migrations/0029_genericteamtoken.py
Normal file
21
kfet/migrations/0029_genericteamtoken.py
Normal file
|
@ -0,0 +1,21 @@
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
from __future__ import unicode_literals
|
||||||
|
|
||||||
|
from django.db import models, migrations
|
||||||
|
|
||||||
|
|
||||||
|
class Migration(migrations.Migration):
|
||||||
|
|
||||||
|
dependencies = [
|
||||||
|
('kfet', '0028_auto_20160820_0146'),
|
||||||
|
]
|
||||||
|
|
||||||
|
operations = [
|
||||||
|
migrations.CreateModel(
|
||||||
|
name='GenericTeamToken',
|
||||||
|
fields=[
|
||||||
|
('id', models.AutoField(serialize=False, primary_key=True, auto_created=True, verbose_name='ID')),
|
||||||
|
('token', models.CharField(unique=True, max_length=50)),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
]
|
|
@ -551,3 +551,6 @@ class Settings(models.Model):
|
||||||
return Settings.setting_inst("CANCEL_DURATION").value_duration
|
return Settings.setting_inst("CANCEL_DURATION").value_duration
|
||||||
except Settings.DoesNotExist:
|
except Settings.DoesNotExist:
|
||||||
return timedelta()
|
return timedelta()
|
||||||
|
|
||||||
|
class GenericTeamToken(models.Model):
|
||||||
|
token = models.CharField(max_length = 50, unique = True)
|
||||||
|
|
|
@ -18,6 +18,9 @@
|
||||||
<li><a href="{% url 'kfet.home' %}">Home</a></li>
|
<li><a href="{% url 'kfet.home' %}">Home</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul class="nav navbar-nav navbar-right">
|
<ul class="nav navbar-nav navbar-right">
|
||||||
|
{% if request.user.username == 'kfet_genericteam' %}
|
||||||
|
<li class="navbar-text">Équipe standard</li>
|
||||||
|
{% endif %}
|
||||||
{% if request.user.profile.account_kfet %}
|
{% if request.user.profile.account_kfet %}
|
||||||
<li>
|
<li>
|
||||||
<a href="{% url 'kfet.account.read' request.user.profile.account_kfet.trigramme %}">Mes infos</a>
|
<a href="{% url 'kfet.account.read' request.user.profile.account_kfet.trigramme %}">Mes infos</a>
|
||||||
|
@ -31,6 +34,9 @@
|
||||||
<li><a href="{% url 'kfet.account' %}">Comptes</a></li>
|
<li><a href="{% url 'kfet.account' %}">Comptes</a></li>
|
||||||
<li><a href="{% url 'kfet.checkout' %}">Caisses</a></li>
|
<li><a href="{% url 'kfet.checkout' %}">Caisses</a></li>
|
||||||
<li><a href="{% url 'kfet.article' %}">Articles</a></li>
|
<li><a href="{% url 'kfet.article' %}">Articles</a></li>
|
||||||
|
{% if request.user.username != 'kfet_genericteam' %}
|
||||||
|
<li><a href="{% url 'kfet.login.genericteam' %}">Connexion standard</a></li>
|
||||||
|
{% endif %}
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
7
kfet/templates/kfet/login_genericteam.html
Normal file
7
kfet/templates/kfet/login_genericteam.html
Normal file
|
@ -0,0 +1,7 @@
|
||||||
|
{% extends 'kfet/base.html' %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
Connexion utilisateur K-Fêt générique réussie
|
||||||
|
|
||||||
|
{% endblock %}
|
|
@ -6,6 +6,8 @@ from kfet import autocomplete
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
url(r'^$', views.home,
|
url(r'^$', views.home,
|
||||||
name = 'kfet.home'),
|
name = 'kfet.home'),
|
||||||
|
url(r'^login/genericteam$', views.login_genericteam,
|
||||||
|
name = 'kfet.login.genericteam'),
|
||||||
|
|
||||||
# -----
|
# -----
|
||||||
# Account urls
|
# Account urls
|
||||||
|
|
|
@ -5,6 +5,7 @@ from django.views.generic.edit import CreateView, UpdateView, DeleteView
|
||||||
from django.core.urlresolvers import reverse_lazy
|
from django.core.urlresolvers import reverse_lazy
|
||||||
from django.contrib import messages
|
from django.contrib import messages
|
||||||
from django.contrib.messages.views import SuccessMessageMixin
|
from django.contrib.messages.views import SuccessMessageMixin
|
||||||
|
from django.contrib.auth import authenticate, login
|
||||||
from django.contrib.auth.decorators import login_required, permission_required
|
from django.contrib.auth.decorators import login_required, permission_required
|
||||||
from django.contrib.auth.models import User, Permission
|
from django.contrib.auth.models import User, Permission
|
||||||
from django.http import HttpResponse, JsonResponse, Http404
|
from django.http import HttpResponse, JsonResponse, Http404
|
||||||
|
@ -12,9 +13,10 @@ from django.forms import modelformset_factory
|
||||||
from django.db import IntegrityError, transaction
|
from django.db import IntegrityError, transaction
|
||||||
from django.db.models import F
|
from django.db.models import F
|
||||||
from django.utils import timezone
|
from django.utils import timezone
|
||||||
|
from django.utils.crypto import get_random_string
|
||||||
from gestioncof.models import CofProfile, Clipper
|
from gestioncof.models import CofProfile, Clipper
|
||||||
from kfet.models import (Account, Checkout, Article, Settings, AccountNegative,
|
from kfet.models import (Account, Checkout, Article, Settings, AccountNegative,
|
||||||
CheckoutStatement)
|
CheckoutStatement, GenericTeamToken)
|
||||||
from kfet.forms import *
|
from kfet.forms import *
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
from channels import Group
|
from channels import Group
|
||||||
|
@ -25,6 +27,14 @@ from datetime import timedelta
|
||||||
def home(request):
|
def home(request):
|
||||||
return render(request, "kfet/base.html")
|
return render(request, "kfet/base.html")
|
||||||
|
|
||||||
|
@permission_required('kfet.is_team')
|
||||||
|
def login_genericteam(request):
|
||||||
|
token = GenericTeamToken.objects.create(token=get_random_string(50))
|
||||||
|
user = authenticate(username="kfet_genericteam", token=token.token)
|
||||||
|
login(request, user)
|
||||||
|
print(request.user)
|
||||||
|
return render(request, "kfet/login_genericteam.html")
|
||||||
|
|
||||||
def put_cleaned_data_in_dict(dict, form):
|
def put_cleaned_data_in_dict(dict, form):
|
||||||
for field in form.cleaned_data:
|
for field in form.cleaned_data:
|
||||||
dict[field] = form.cleaned_data[field]
|
dict[field] = form.cleaned_data[field]
|
||||||
|
|
Loading…
Reference in a new issue