Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/webapp
diff options
context:
space:
mode:
authorRogelio Mita <rogeliomita@activitycentral.com>2013-04-16 20:12:46 (GMT)
committer Rogelio Mita <rogeliomita@activitycentral.com>2013-04-16 20:12:46 (GMT)
commitcf9c2e3bda0e3ba20eb107db9da655052e89bbf0 (patch)
treeaff3e45e75af2da9c8e04617ec10eaed9b7d686f /webapp
parent19c6ab15a2eacf059a8fac1cf193ac16feb62197 (diff)
Sociologist rol separation
Diffstat (limited to 'webapp')
-rw-r--r--webapp/custom_admin/admin.py3
-rw-r--r--webapp/polls/templates/poll-form.html2
-rw-r--r--webapp/polls/views.py30
-rw-r--r--webapp/pollster/templates/pollster-assigned-polls.html2
-rw-r--r--webapp/pollster/urls.py14
-rw-r--r--webapp/pollster/views.py6
-rw-r--r--webapp/sociologist/__init__.py0
-rw-r--r--webapp/sociologist/decorators.py16
-rw-r--r--webapp/sociologist/fixtures/initial_data.json10
-rw-r--r--webapp/sociologist/middlewares/__init__.py0
-rw-r--r--webapp/sociologist/middlewares/sociologist.py38
-rw-r--r--webapp/sociologist/models.py0
-rw-r--r--webapp/sociologist/poll_urls.py23
-rw-r--r--webapp/sociologist/pollster_urls.py17
-rw-r--r--webapp/sociologist/tests/__init__.py0
-rw-r--r--webapp/sociologist/tests/middleware_tests.py67
-rw-r--r--webapp/sociologist/tests/sociologist_tests.py15
-rw-r--r--webapp/sociologist/urls.py13
-rw-r--r--webapp/sociologist/views.py1
-rw-r--r--webapp/utils/decorators.py3
-rw-r--r--webapp/webapp/settings.py6
-rw-r--r--webapp/webapp/templates/admin/base_site.html2
-rw-r--r--webapp/webapp/templates/base-main.html20
-rw-r--r--webapp/webapp/urls.py14
-rw-r--r--webapp/webapp/views.py16
25 files changed, 262 insertions, 56 deletions
diff --git a/webapp/custom_admin/admin.py b/webapp/custom_admin/admin.py
index ae403cc..567d0b6 100644
--- a/webapp/custom_admin/admin.py
+++ b/webapp/custom_admin/admin.py
@@ -6,7 +6,7 @@ from django.contrib.auth.admin import UserAdmin as DjangoUserAdmin
class UserAdmin(DjangoUserAdmin):
fieldsets = (
- (None, {'fields': ('username', 'password', 'is_active')}),
+ (None, {'fields': ('username', 'password', 'is_active', 'is_staff')}),
(_('Personal info'), {'fields': ('first_name', 'last_name', 'email')}),
(_('Important dates'), {'fields': ('last_login', 'date_joined')}),
)
@@ -18,6 +18,7 @@ class UserAdmin(DjangoUserAdmin):
def has_delete_permission(self, request, obj=None):
return False
+
admin.site.unregister(Group)
admin.site.unregister(User)
admin.site.disable_action('delete_selected')
diff --git a/webapp/polls/templates/poll-form.html b/webapp/polls/templates/poll-form.html
index 8edb0a0..b81d911 100644
--- a/webapp/polls/templates/poll-form.html
+++ b/webapp/polls/templates/poll-form.html
@@ -80,7 +80,7 @@
(function($){
var url = {
- form_submit: '{% if poll.id %}{% url polls:edit poll.id %}{% else %}{% url polls:add %}{% endif %}?continue=true',
+ form_submit: '{% if poll.id %}{% url sociologist:poll_edit poll.id %}{% else %}{% url sociologist:poll_add %}{% endif %}?continue=true',
};
var form;
diff --git a/webapp/polls/views.py b/webapp/polls/views.py
index 21882ab..4db1718 100644
--- a/webapp/polls/views.py
+++ b/webapp/polls/views.py
@@ -18,7 +18,6 @@ from django.contrib import messages
from django.core.files.uploadedfile import InMemoryUploadedFile
from django.shortcuts import render_to_response
from django.conf import settings
-from django.utils.decorators import method_decorator
from utils.forms import BadFormValidation
from utils.data_structure import dict_merge
@@ -26,7 +25,6 @@ from utils.data_structure import dict_merge
from polls.models import WIDGET_TYPES, Structure, Poll, PollResult
from polls.forms import PollAddForm
from pollster.models import Pollster
-from pollster.decorators import pollster_required
__all__ = [
@@ -117,14 +115,14 @@ class PollFormView(FormView):
if self.request.GET.get('continue', None):
return HttpResponseRedirect(
reverse(
- 'polls:structure.builder',
+ 'sociologist:structure.builder',
kwargs={'poll_id': str(poll.id)}
)
)
else:
return HttpResponseRedirect(
reverse(
- 'polls:edit',
+ 'sociologist:poll_edit',
kwargs={'id': str(poll.id)}
)
)
@@ -137,13 +135,6 @@ class PollListView(ListView):
template_name = "poll-list.html"
context_object_name = "polls"
- def dispatch(self, *args, **kwargs):
-
- if args[0].user.is_pollster:
- return HttpResponseRedirect(reverse('pollsters:assigned_polls'))
-
- return super(PollListView, self).dispatch(*args, **kwargs)
-
def get_queryset(self, *args, **kwargs):
user = self.request.user
return [
@@ -154,20 +145,20 @@ class PollListView(ListView):
'action_edit': {
'disabled': "disabled" if not user.is_superuser else "",
'url': reverse(
- 'polls:edit', kwargs={'id': str(poll.id)}
+ 'sociologist:poll_edit', kwargs={'id': str(poll.id)}
),
},
'action_structure_builder': {
'disabled': "disabled" if not poll.is_open() else "",
'url': reverse(
- 'polls:structure.builder',
+ 'sociologist:structure.builder',
kwargs={'poll_id': str(poll.id)}
)
},
'action_download': {
'disabled': "disabled" if poll.is_open() else "",
'url': reverse(
- 'polls:download',
+ 'sociologist:poll_download',
kwargs={'poll_id': str(poll.id)}
),
},
@@ -241,7 +232,7 @@ class StructureFormView(TemplateView):
return HttpResponseRedirect(
reverse(
- 'polls:structure.builder',
+ 'sociologist:structure.builder',
kwargs={"poll_id": str(self.poll.id)}
)
)
@@ -301,15 +292,6 @@ class UnploadPollResultFormView(TemplateView):
template_name = "poll-result-form.html"
- def get(self, request, *args, **kwargs):
- context = self.get_context_data()
-
- return self.render_to_response(context)
-
- @method_decorator(pollster_required)
- def dispatch(self, *args, **kwargs):
- return super(UnploadPollResultFormView, self).dispatch(*args, **kwargs)
-
def post(self, request, *args, **kwargs):
context = self.get_context_data()
diff --git a/webapp/pollster/templates/pollster-assigned-polls.html b/webapp/pollster/templates/pollster-assigned-polls.html
index 8c0bd15..0878699 100644
--- a/webapp/pollster/templates/pollster-assigned-polls.html
+++ b/webapp/pollster/templates/pollster-assigned-polls.html
@@ -37,7 +37,7 @@
<td>{{ poll.name|capfirst }}</td>
<td>{% if poll.get_result %}Existe resultado, no visualizable en esta version{% else %}No hay resultados a&uacute;n.{% endif %}</td>
<td>
- <a class="btn" href="{% url polls:download poll_id=poll.id %}">
+ <a class="btn" href="{% url sociologist:poll_download poll_id=poll.id %}">
<i class="icon-download-alt"></i>&nbsp;Descargar encuesta
</a>
</td>
diff --git a/webapp/pollster/urls.py b/webapp/pollster/urls.py
index 240e39c..2e081a0 100644
--- a/webapp/pollster/urls.py
+++ b/webapp/pollster/urls.py
@@ -1,20 +1,18 @@
from django.conf.urls.defaults import patterns, url
+from django.views.generic.base import RedirectView
from pollster.views import *
+from polls.views import *
urlpatterns = patterns('',
- # Pollster
- url(r'^$', PollsterListView.as_view(), name="list"),
- url(r'^new/$', PollsterFormView.as_view(), name="new"),
+ # Polls
+ url(r'^$', RedirectView.as_view(url='assigned_polls/'), name="index"),
url(
r'^assigned_polls/$',
PollsterAssignedPollsListView.as_view(),
name="assigned_polls"
),
- url(
- r'^poll_assignment/(?P<id>[0-9A-Fa-f]{24})/$',
- PollAsignationFormView.as_view(),
- name="poll_assignment"
- ),
+ url(r'^upload_result/$',
+ UnploadPollResultFormView.as_view(), name="upload_result"),
)
diff --git a/webapp/pollster/views.py b/webapp/pollster/views.py
index 8685769..e1c3792 100644
--- a/webapp/pollster/views.py
+++ b/webapp/pollster/views.py
@@ -80,7 +80,7 @@ class PollsterListView(ListView):
'username': pe.get_user().username,
'email': pe.get_user().email,
'action_assign': reverse(
- 'pollsters:poll_assignment', kwargs={'id': str(pe.id)})
+ 'sociologist:poll_assignment', kwargs={'id': str(pe.id)})
} for pe in Pollster.all()
]
@@ -104,7 +104,7 @@ class PollsterFormView(FormView):
msg = u'El encuestador fué guardado con éxito.'
messages.add_message(self.request, messages.SUCCESS, msg)
- return HttpResponseRedirect(reverse('pollsters:list'))
+ return HttpResponseRedirect(reverse('sociologist:pollster_list'))
return self.form_invalid(form)
@@ -148,6 +148,6 @@ class PollAsignationFormView(FormView):
msg = u'Se realizaron las asignaciones correctamente.'
messages.add_message(self.request, messages.SUCCESS, msg)
- return HttpResponseRedirect(reverse('pollsters:list'))
+ return HttpResponseRedirect(reverse('sociologist:pollster_list'))
return self.form_invalid(form)
diff --git a/webapp/sociologist/__init__.py b/webapp/sociologist/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/webapp/sociologist/__init__.py
diff --git a/webapp/sociologist/decorators.py b/webapp/sociologist/decorators.py
new file mode 100644
index 0000000..9967945
--- /dev/null
+++ b/webapp/sociologist/decorators.py
@@ -0,0 +1,16 @@
+from functools import wraps
+
+from django.http import Http404
+
+from utils.decorators import user_account_required
+
+
+def sociologist_required(view_function):
+ @wraps(view_function)
+ @user_account_required
+ def decorator(*args, **kwargs):
+ if args[0].user.is_sociologist:
+ return view_function(*args, **kwargs)
+ else:
+ raise Http404()
+ return decorator
diff --git a/webapp/sociologist/fixtures/initial_data.json b/webapp/sociologist/fixtures/initial_data.json
new file mode 100644
index 0000000..c9e3699
--- /dev/null
+++ b/webapp/sociologist/fixtures/initial_data.json
@@ -0,0 +1,10 @@
+[
+ {
+ "pk": 2,
+ "model": "auth.group",
+ "fields": {
+ "name": "sociologist",
+ "permissions": []
+ }
+ }
+] \ No newline at end of file
diff --git a/webapp/sociologist/middlewares/__init__.py b/webapp/sociologist/middlewares/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/webapp/sociologist/middlewares/__init__.py
diff --git a/webapp/sociologist/middlewares/sociologist.py b/webapp/sociologist/middlewares/sociologist.py
new file mode 100644
index 0000000..b9d3cf2
--- /dev/null
+++ b/webapp/sociologist/middlewares/sociologist.py
@@ -0,0 +1,38 @@
+from django.conf import settings
+
+
+def path_start_with(query, path):
+ matched = False
+ try:
+ # check if the url is in the path
+ matched = path.index(
+ ('%s' if query[0] == '/' else '/%s') % query
+ ) == 0
+ except ValueError:
+ pass
+ return matched
+
+
+IGNORE_REQUEST_PATHS = (
+ '/favicon.ico',
+ settings.STATIC_URL,
+ settings.MEDIA_URL,
+ '/admin/'
+)
+
+
+class SociologistMiddleware(object):
+
+ def process_request(self, request):
+
+ for ignore in IGNORE_REQUEST_PATHS:
+ if path_start_with(ignore, request.path):
+ return None
+
+ user = request.user
+ is_sociologist = user.is_authenticated() and (user.groups.filter(
+ name='sociologist').exists() or user.is_superuser or user.is_staff)
+
+ setattr(request.user, 'is_sociologist', is_sociologist)
+
+ return None
diff --git a/webapp/sociologist/models.py b/webapp/sociologist/models.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/webapp/sociologist/models.py
diff --git a/webapp/sociologist/poll_urls.py b/webapp/sociologist/poll_urls.py
new file mode 100644
index 0000000..628452b
--- /dev/null
+++ b/webapp/sociologist/poll_urls.py
@@ -0,0 +1,23 @@
+from django.conf.urls.defaults import patterns, url
+
+from polls.views import *
+
+
+urlpatterns = patterns(
+ '',
+
+ # Poll CRUD
+ url(r'^$', PollListView.as_view(), name="poll_list"),
+ url(r'^add/$', PollFormView.as_view(), name="poll_add"),
+ url(r'^edit/(?P<id>[0-9A-Fa-f]{24})/$',
+ PollFormView.as_view(), name="poll_edit"),
+
+ # Poll structure CRUD
+ url(r'^structure/(?P<poll_id>[0-9A-Fa-f]{24})/$',
+ StructureFormView.as_view(), name="structure.builder"),
+ url(r'^download/(?P<poll_id>[0-9A-Fa-f]{24})/$',
+ 'polls.views.download_poll', name="poll_download"),
+
+ url(r'^option/thumb/(?P<poll_id>[0-9A-Fa-f]{24})/(?P<img_name>.*)/$',
+ 'polls.views.opt_thumb'),
+)
diff --git a/webapp/sociologist/pollster_urls.py b/webapp/sociologist/pollster_urls.py
new file mode 100644
index 0000000..faccbf6
--- /dev/null
+++ b/webapp/sociologist/pollster_urls.py
@@ -0,0 +1,17 @@
+from django.conf.urls.defaults import patterns, url
+
+from pollster.views import *
+
+
+urlpatterns = patterns(
+ '',
+
+ # Pollster CRUD
+ url(r'^$', PollsterListView.as_view(), name="pollster_list"),
+ url(r'^new/$', PollsterFormView.as_view(), name="pollster_new"),
+ url(
+ r'^poll_assignment/(?P<id>[0-9A-Fa-f]{24})/$',
+ PollAsignationFormView.as_view(),
+ name="poll_assignment"
+ ),
+)
diff --git a/webapp/sociologist/tests/__init__.py b/webapp/sociologist/tests/__init__.py
new file mode 100644
index 0000000..e69de29
--- /dev/null
+++ b/webapp/sociologist/tests/__init__.py
diff --git a/webapp/sociologist/tests/middleware_tests.py b/webapp/sociologist/tests/middleware_tests.py
new file mode 100644
index 0000000..7c4b447
--- /dev/null
+++ b/webapp/sociologist/tests/middleware_tests.py
@@ -0,0 +1,67 @@
+from django.contrib.auth.models import Group, User
+
+from django.test.client import RequestFactory
+
+from utils.test import MongoTestCase
+
+from sociologist.middlewares.sociologist import SociologistMiddleware
+
+
+class PollsterTests(MongoTestCase):
+
+ def test_is_sociologist_when_is_superuser(self):
+
+ user = User.objects.create_user(username="username")
+ user.is_superuser = True
+
+ request = RequestFactory().get('/')
+ setattr(request, 'user', user)
+
+ middleare = SociologistMiddleware()
+
+ middleare.process_request(request)
+
+ self.assertTrue(user.is_sociologist)
+
+ def test_is_sociologist_when_is_in_sociologist_group(self):
+
+ sociologist_group = Group.objects.get(name='sociologist')
+ user = User.objects.create_user(username="username")
+
+ user.groups.add(sociologist_group)
+
+ request = RequestFactory().get('/')
+ setattr(request, 'user', user)
+
+ middleare = SociologistMiddleware()
+
+ middleare.process_request(request)
+
+ self.assertTrue(user.is_sociologist)
+
+ def test_is_sociologist_when_is_staff(self):
+
+ user = User.objects.create_user(username="username")
+
+ user.is_staff = True
+
+ request = RequestFactory().get('/')
+ setattr(request, 'user', user)
+
+ middleare = SociologistMiddleware()
+
+ middleare.process_request(request)
+
+ self.assertTrue(user.is_sociologist)
+
+ def test_is_not_sociologist(self):
+ user = User.objects.create_user(username="username")
+
+ request = RequestFactory().get('/')
+ setattr(request, 'user', user)
+
+ middleare = SociologistMiddleware()
+
+ middleare.process_request(request)
+
+ self.assertFalse(user.is_sociologist)
diff --git a/webapp/sociologist/tests/sociologist_tests.py b/webapp/sociologist/tests/sociologist_tests.py
new file mode 100644
index 0000000..40a471d
--- /dev/null
+++ b/webapp/sociologist/tests/sociologist_tests.py
@@ -0,0 +1,15 @@
+from django.contrib.auth.models import Group
+
+from utils.test import MongoTestCase
+
+
+class PollsterTests(MongoTestCase):
+
+ def setUp(self):
+ self.sociologist_group = Group.objects.get(name='sociologist')
+
+ def test_group(self):
+ sociologist_group = Group.objects.filter(name='sociologist')
+
+ self.assertEqual(1, len(sociologist_group))
+ self.assertEqual(sociologist_group[0].name, sociologist_group[0].name)
diff --git a/webapp/sociologist/urls.py b/webapp/sociologist/urls.py
new file mode 100644
index 0000000..fbc133a
--- /dev/null
+++ b/webapp/sociologist/urls.py
@@ -0,0 +1,13 @@
+from django.conf.urls.defaults import patterns, url, include
+from django.views.generic.base import RedirectView
+
+from pollster.views import *
+
+
+urlpatterns = patterns('',
+ url(r'^$', RedirectView.as_view(url='polls/'), name="index"),
+ # Polls
+ url(r'^polls/', include('sociologist.poll_urls')),
+ # Pollsters
+ url(r'^pollsters/', include('sociologist.pollster_urls')),
+)
diff --git a/webapp/sociologist/views.py b/webapp/sociologist/views.py
new file mode 100644
index 0000000..60f00ef
--- /dev/null
+++ b/webapp/sociologist/views.py
@@ -0,0 +1 @@
+# Create your views here.
diff --git a/webapp/utils/decorators.py b/webapp/utils/decorators.py
index f6726ad..1ac8f85 100644
--- a/webapp/utils/decorators.py
+++ b/webapp/utils/decorators.py
@@ -10,7 +10,8 @@ from django.contrib.auth.decorators import login_required
__all__ = [
'decorator_include',
- 'user_account_required'
+ 'user_account_required',
+ 'superuser_required',
]
diff --git a/webapp/webapp/settings.py b/webapp/webapp/settings.py
index 2c4c88c..b79429e 100644
--- a/webapp/webapp/settings.py
+++ b/webapp/webapp/settings.py
@@ -93,12 +93,17 @@ TEMPLATE_LOADERS = (
)
MIDDLEWARE_CLASSES = (
+ # Django middlewares
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
+
+ # Sociologist and Pollster user rol middlewares
+ 'sociologist.middlewares.sociologist.SociologistMiddleware',
'pollster.middlewares.pollster.PollsterMiddleware',
+
# Uncomment the next line for simple clickjacking protection:
# 'django.middleware.clickjacking.XFrameOptionsMiddleware',
)
@@ -129,6 +134,7 @@ INSTALLED_APPS = (
# Project
'polls',
'pollster',
+ 'sociologist',
'custom_admin',
'accounts',
'utils',
diff --git a/webapp/webapp/templates/admin/base_site.html b/webapp/webapp/templates/admin/base_site.html
index 65696c0..5bd2b25 100644
--- a/webapp/webapp/templates/admin/base_site.html
+++ b/webapp/webapp/templates/admin/base_site.html
@@ -14,6 +14,6 @@
{% block nav-global %}
<ul id="nav-global">
- <span><a href="{% url polls:list %}"><i class="icon-chevron-left icon-white"></i>&nbsp;Volver a encuestas.</a></span>
+ <span><a href="{% url sociologist:poll_list %}"><i class="icon-chevron-left icon-white"></i>&nbsp;Volver a encuestas.</a></span>
</ul>
{% endblock %}
diff --git a/webapp/webapp/templates/base-main.html b/webapp/webapp/templates/base-main.html
index 4306f9d..ba7d1ac 100644
--- a/webapp/webapp/templates/base-main.html
+++ b/webapp/webapp/templates/base-main.html
@@ -55,22 +55,22 @@
<div class="nav-collapse collapse">
<ul class="nav">
- {% if not user.is_pollster %}
- {% url polls:list as polls_list_url %}
- <li class="{% if request.path == polls_list_url %}active{% endif %}">
- <a href="{{ polls_list_url }}"><i class="icon-white icon-list-alt"></i>&nbsp;Listado de encuestas</a>
+ {% if user.is_sociologist %}
+ {% url sociologist:poll_list as poll_list_url %}
+ <li class="{% if request.path == poll_list_url %}active{% endif %}">
+ <a href="{{ poll_list_url }}"><i class="icon-white icon-list-alt"></i>&nbsp;Listado de encuestas</a>
</li>
- {% url polls:add as polls_add_url %}
- <li class="{% if request.path == polls_add_url %}active{% endif %}">
- <a href="{{ polls_add_url }}"><i class="icon-white icon-plus"></i>&nbsp;Nueva encuesta</a>
+ {% url sociologist:poll_add as poll_add_url %}
+ <li class="{% if request.path == poll_add_url %}active{% endif %}">
+ <a href="{{ poll_add_url }}"><i class="icon-white icon-plus"></i>&nbsp;Nueva encuesta</a>
</li>
<li class="dropdown {% if 'pollsters' in request.path %}active{% endif %}">
<a href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="icon-white icon-group"></i>&nbsp;Encuestadores&nbsp;<b class="caret"></b></a>
<ul class="dropdown-menu">
- <li><a href="{% url pollsters:list %}"><i class="icon-list-alt"></i>&nbsp;Listado/Asginaci&oacute;n</a></li>
- <li><a href="{% url pollsters:new %}"><i class="icon-plus"></i>&nbsp;Nuevo</a></li>
+ <li><a href="{% url sociologist:pollster_list %}"><i class="icon-list-alt"></i>&nbsp;Listado/Asginaci&oacute;n</a></li>
+ <li><a href="{% url sociologist:pollster_new %}"><i class="icon-plus"></i>&nbsp;Nuevo</a></li>
</ul>
</li>
{% endif %}
@@ -81,7 +81,7 @@
<a href="{{ assigned_polls_url }}"><i class="icon-list"></i>&nbsp;Mis encuestas</a>
</li>
- {% url polls:upload_result as upload_result_url %}
+ {% url pollsters:upload_result as upload_result_url %}
<li class="{% if request.path == upload_result_url %}active{% endif %}">
<a href="{{ upload_result_url }}"><i class="icon-white icon-upload"></i>&nbsp;Subir resultado</a>
</li>
diff --git a/webapp/webapp/urls.py b/webapp/webapp/urls.py
index dddeae0..a7ca1d3 100644
--- a/webapp/webapp/urls.py
+++ b/webapp/webapp/urls.py
@@ -1,20 +1,22 @@
import os
from django.conf.urls.defaults import patterns, include, url
-from django.views.generic.base import RedirectView
from django.conf import settings
from utils.decorators import *
+from sociologist.decorators import sociologist_required
+from pollster.decorators import pollster_required
urlpatterns = patterns('',
- url(r'^admin/', include('custom_admin.urls')),
url(r'^accounts/', include('accounts.urls', namespace="accounts")),
+ url(r'^admin/', decorator_include(superuser_required, 'custom_admin.urls')),
+ url(r'^manager/', decorator_include(
+ sociologist_required, 'sociologist.urls', namespace="sociologist")),
url(r'^polls/', decorator_include(
- user_account_required, 'polls.urls', namespace="polls")),
- url(r'^$', RedirectView.as_view(url='polls/')),
- url(r'^pollsters/', decorator_include(
- user_account_required, 'pollster.urls', namespace="pollsters")),
+ pollster_required, 'pollster.urls', namespace="pollsters")),
+
+ url(r'^$', 'webapp.views.roles_redirection', name="index"),
)
if settings.DEBUG:
diff --git a/webapp/webapp/views.py b/webapp/webapp/views.py
new file mode 100644
index 0000000..dc80291
--- /dev/null
+++ b/webapp/webapp/views.py
@@ -0,0 +1,16 @@
+from django.http import HttpResponseRedirect, Http404
+from django.core.urlresolvers import reverse
+
+from utils.decorators import *
+
+
+@user_account_required
+def roles_redirection(request):
+
+ if request.user.is_pollster:
+ return HttpResponseRedirect(reverse('pollsters:index'))
+
+ if request.user.is_sociologist:
+ return HttpResponseRedirect(reverse('sociologist:index'))
+
+ raise Http404()