From d4a0a9b7dd7b49014868bac924d3f2544e844848 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Kl=C3=BCnder?= Date: Mon, 4 Dec 2017 16:11:42 +0100 Subject: [PATCH] show current (maybe anonymous) user and their permissions --- src/c3nav/api/urls.py | 5 ++++- src/c3nav/mapdata/api.py | 7 +++++++ src/c3nav/mapdata/utils/user.py | 26 ++++++++++++++++++++++++ src/c3nav/site/static/site/css/c3nav.css | 12 ++++++++++- src/c3nav/site/templates/site/map.html | 4 ++++ src/c3nav/site/views.py | 10 +++------ 6 files changed, 55 insertions(+), 9 deletions(-) create mode 100644 src/c3nav/mapdata/utils/user.py diff --git a/src/c3nav/api/urls.py b/src/c3nav/api/urls.py index 85ffde8e..e9727691 100644 --- a/src/c3nav/api/urls.py +++ b/src/c3nav/api/urls.py @@ -11,7 +11,8 @@ from c3nav.editor.api import ChangeSetViewSet, EditorViewSet from c3nav.mapdata.api import (AccessRestrictionViewSet, AreaViewSet, BuildingViewSet, ColumnViewSet, DoorViewSet, HoleViewSet, LevelViewSet, LineObstacleViewSet, LocationBySlugViewSet, LocationGroupCategoryViewSet, LocationGroupViewSet, LocationViewSet, MapViewSet, - ObstacleViewSet, POIViewSet, RampViewSet, SourceViewSet, SpaceViewSet, StairViewSet) + ObstacleViewSet, POIViewSet, RampViewSet, SourceViewSet, SpaceViewSet, StairViewSet, + UserViewSet) from c3nav.routing.api import RoutingViewSet router = SimpleRouter() @@ -36,6 +37,8 @@ router.register(r'locations/by_slug', LocationBySlugViewSet, base_name='location router.register(r'locationgroupcategories', LocationGroupCategoryViewSet) router.register(r'locationgroups', LocationGroupViewSet) +router.register(r'user', UserViewSet, base_name='user') + router.register(r'routing', RoutingViewSet, base_name='routing') router.register(r'editor', EditorViewSet, base_name='editor') diff --git a/src/c3nav/mapdata/api.py b/src/c3nav/mapdata/api.py index 6792e4b5..8867f583 100644 --- a/src/c3nav/mapdata/api.py +++ b/src/c3nav/mapdata/api.py @@ -27,6 +27,7 @@ from c3nav.mapdata.models.locations import (Location, LocationGroupCategory, Loc from c3nav.mapdata.utils.locations import (get_location_by_id_for_request, get_location_by_slug_for_request, searchable_locations_for_request, visible_locations_for_request) from c3nav.mapdata.utils.models import get_submodels +from c3nav.mapdata.utils.user import get_user_data def optimize_query(qs): @@ -378,3 +379,9 @@ class SourceViewSet(MapdataViewSet): class AccessRestrictionViewSet(MapdataViewSet): queryset = AccessRestriction.objects.all() + + +class UserViewSet(MapdataViewSet): + @list_route(methods=['get']) + def current(self, request, key=None): + return Response(get_user_data(request)) diff --git a/src/c3nav/mapdata/utils/user.py b/src/c3nav/mapdata/utils/user.py new file mode 100644 index 00000000..c62a6939 --- /dev/null +++ b/src/c3nav/mapdata/utils/user.py @@ -0,0 +1,26 @@ +from django.utils.translation import ugettext_lazy as _ +from django.utils.translation import ungettext_lazy + +from c3nav.mapdata.models.access import AccessPermission + + +def get_user_data(request): + permissions = AccessPermission.get_for_request(request) + result = { + 'logged_in': bool(request.user.is_authenticated), + } + if permissions: + result.update({ + 'title': _('not logged in'), + 'subtitle': ungettext_lazy('%d area unlocked', '%d areas unlocked', len(permissions)) % len(permissions), + 'permissions': tuple(permissions), + }) + else: + result.update({ + 'title': _('Login'), + 'subtitle': None, + 'permissions': (), + }) + if request.user.is_authenticated: + result['title'] = request.user.username + return result diff --git a/src/c3nav/site/static/site/css/c3nav.css b/src/c3nav/site/static/site/css/c3nav.css index 79122da8..7d56b015 100644 --- a/src/c3nav/site/static/site/css/c3nav.css +++ b/src/c3nav/site/static/site/css/c3nav.css @@ -12,10 +12,20 @@ header { padding: 10px; display: flex; align-items: center; + justify-content: space-between; } header h1 { font-size: 3rem; - margin:0; + margin: 0; +} +header #user { + text-align: right; + padding: 0 0 3px 10px; +} +header #user small { + display: block; + margin-top: -3px; + color: #606c76; } input { diff --git a/src/c3nav/site/templates/site/map.html b/src/c3nav/site/templates/site/map.html index 737b01ea..1437c243 100644 --- a/src/c3nav/site/templates/site/map.html +++ b/src/c3nav/site/templates/site/map.html @@ -20,6 +20,10 @@

c3nav

+ + {{ user_data.title }} + {% if user_data.subtitle %}{{ user_data.subtitle }}{% endif %} +