show current (maybe anonymous) user and their permissions
This commit is contained in:
parent
af8b48518b
commit
d4a0a9b7dd
6 changed files with 55 additions and 9 deletions
|
@ -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')
|
||||
|
|
|
@ -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))
|
||||
|
|
26
src/c3nav/mapdata/utils/user.py
Normal file
26
src/c3nav/mapdata/utils/user.py
Normal 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
|
|
@ -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 {
|
||||
|
|
|
@ -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">
|
||||
|
|
|
@ -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)
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue