show current (maybe anonymous) user and their permissions

This commit is contained in:
Laura Klünder 2017-12-04 16:11:42 +01:00
parent af8b48518b
commit d4a0a9b7dd
6 changed files with 55 additions and 9 deletions

View file

@ -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')

View file

@ -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))

View file

@ -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

View file

@ -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 {

View file

@ -20,6 +20,10 @@
<body>
<header>
<h1>c3nav</h1>
<a href="#" id="user">
<span>{{ user_data.title }}</span>
{% if user_data.subtitle %}<small>{{ user_data.subtitle }}</small>{% endif %}
</a>
</header>
<main class="map" data-state="{{ state }}">
<section id="popup-buttons">

View file

@ -1,23 +1,18 @@
# flake8: noqa
import json
from collections import OrderedDict
from typing import Optional
import qrcode
from django.conf import settings
from django.core.cache import cache
from django.core.serializers.json import DjangoJSONEncoder
from django.http import Http404, HttpResponse, HttpResponseBadRequest
from django.http import HttpResponse, HttpResponseBadRequest
from django.shortcuts import render
from django.urls import reverse
from django.views.decorators.cache import cache_control
from django.views.decorators.http import etag
from c3nav.mapdata.models import Location, Source
from c3nav.mapdata.models.access import AccessPermission
from c3nav.mapdata.models.level import Level
from c3nav.mapdata.models.locations import LocationRedirect, SpecificLocation
from c3nav.mapdata.utils.locations import get_location_by_slug_for_request, levels_by_short_label_for_request
from c3nav.mapdata.utils.user import get_user_data
from c3nav.mapdata.views import set_tile_access_cookie
@ -81,6 +76,7 @@ def map_index(request, mode=None, slug=None, slug2=None, details=None, level=Non
'levels': json.dumps(tuple((level.pk, level.short_label) for level in levels.values()), separators=(',', ':')),
'state': json.dumps(state, separators=(',', ':'), cls=DjangoJSONEncoder),
'tile_cache_server': settings.TILE_CACHE_SERVER,
'user_data': get_user_data(request),
}
return render(request, 'site/map.html', ctx)