From 65a2e8c08c5dcccf2438773a1bc874e73d197b94 Mon Sep 17 00:00:00 2001
From: Yohann D'ANELLO <yohann.danello@gmail.com>
Date: Wed, 7 Oct 2020 11:29:52 +0200
Subject: [PATCH] Better index page: non-Kfet members will be redirected to
 their profile page, the account note (when it will be managed) will see the
 consumption page

---
 note_kfet/settings/base.py    |  2 +-
 note_kfet/templates/base.html |  3 ++-
 note_kfet/urls.py             |  5 ++---
 note_kfet/views.py            | 30 ++++++++++++++++++++++++++++++
 4 files changed, 35 insertions(+), 5 deletions(-)
 create mode 100644 note_kfet/views.py

diff --git a/note_kfet/settings/base.py b/note_kfet/settings/base.py
index f319b2db..f94a68e0 100644
--- a/note_kfet/settings/base.py
+++ b/note_kfet/settings/base.py
@@ -245,7 +245,7 @@ REST_FRAMEWORK = {
 FORM_RENDERER = 'django.forms.renderers.TemplatesSetting'
 
 # After login redirect user to transfer page
-LOGIN_REDIRECT_URL = '/note/transfer/'
+LOGIN_REDIRECT_URL = '/'
 
 # An user session will expired after 3 hours
 SESSION_COOKIE_AGE = 60 * 60 * 3
diff --git a/note_kfet/templates/base.html b/note_kfet/templates/base.html
index e597d5ca..1e740012 100644
--- a/note_kfet/templates/base.html
+++ b/note_kfet/templates/base.html
@@ -64,7 +64,8 @@ SPDX-License-Identifier: GPL-3.0-or-later
                             <a class="nav-link {% if request.path_info == url %}active{% endif %}" href="{{ url }}"><i class="fa fa-coffee"></i> {% trans 'Consumptions' %}</a>
                         </li>
                     {% endif %}
-                    {% if "note.transaction"|not_empty_model_list %}
+                    {# FIXME Find a better solution to check if a user has the right to see the transfer page #}
+                    {% if "note.alias"|model_list_length >= 2 %}
                         <li class="nav-item">
                             {% url 'note:transfer' as url %}
                             <a class="nav-link {% if request.path_info == url %}active{% endif %}" href="{{ url }}"><i class="fa fa-exchange"></i> {% trans 'Transfer' %} </a>
diff --git a/note_kfet/urls.py b/note_kfet/urls.py
index d9e51b63..d4341bc6 100644
--- a/note_kfet/urls.py
+++ b/note_kfet/urls.py
@@ -5,15 +5,14 @@ from django.conf import settings
 from django.conf.urls.static import static
 from django.urls import path, include
 from django.views.defaults import bad_request, permission_denied, page_not_found, server_error
-from django.views.generic import RedirectView
-
 from member.views import CustomLoginView
 
 from .admin import admin_site
+from .views import IndexView
 
 urlpatterns = [
     # Dev so redirect to something random
-    path('', RedirectView.as_view(pattern_name='note:transfer'), name='index'),
+    path('', IndexView.as_view(), name='index'),
 
     # Include project routers
     path('note/', include('note.urls')),
diff --git a/note_kfet/views.py b/note_kfet/views.py
new file mode 100644
index 00000000..bd2b2424
--- /dev/null
+++ b/note_kfet/views.py
@@ -0,0 +1,30 @@
+# Copyright (C) 2018-2020 by BDE ENS Paris-Saclay
+# SPDX-License-Identifier: GPL-3.0-or-later
+
+from django.contrib.auth.mixins import LoginRequiredMixin
+from django.urls import reverse
+from django.views.generic import RedirectView
+from note.models import Alias
+from permission.backends import PermissionBackend
+
+
+class IndexView(LoginRequiredMixin, RedirectView):
+    def get_redirect_url(self, *args, **kwargs):
+        """
+        Calculate the index page according to the roles.
+        A normal user will have access to the transfer page.
+        A non-Kfet member will have access to its user detail page.
+        The user "note" will display the consumption interface.
+        """
+        user = self.request.user
+
+        # The account note will have the consumption page as default page
+        if not PermissionBackend.check_perm(user, "auth.view_user", user):
+            return reverse("note:consos")
+
+        # People that can see the alias BDE are Kfet members
+        if PermissionBackend.check_perm(user, "alias.view_alias", Alias.objects.get(name="BDE")):
+            return reverse("note:transfer")
+
+        # Non-Kfet members will don't see the transfer page, but their profile page
+        return reverse("member:user_detail", args=(user.pk,))
-- 
GitLab