import json
import logging
import traceback
from django.shortcuts import render
from django.http import HttpResponse
from django.views.generic import DetailView
from django.core.exceptions import PermissionDenied
from django.contrib.auth.mixins import PermissionRequiredMixin
from .models import Geocollection
logger = logging.getLogger(__name__)
class GeocollectionDetail(PermissionRequiredMixin, DetailView):
model = Geocollection
def has_permission(self):
return self.request.user.has_perm('access_geocollection', self.get_object())
def geocollection_permissions(request, collection_slug):
geocollection = Geocollection.objects.get(slug=collection_slug)
user = request.user
if not user.is_superuser:
raise PermissionDenied
if request.method == 'GET':
return render(request, 'geocollections/geocollection_permissions.html', context={'object': geocollection})
elif request.method == 'POST':
success = True
message = "Permissions successfully updated!"
try:
perm_spec = json.loads(request.POST.get('perm_spec'))
logger.info(f" ---- setting perm_spec: {perm_spec}")
geocollection.set_permissions(perm_spec)
return HttpResponse(
json.dumps({'success': success, 'message': message}),
status=200,
content_type='text/plain'
)
except Exception as e:
traceback.print_exc()
logger.exception(e)
success = False
message = f"Error updating permissions :(... error: {e}"
return HttpResponse(
json.dumps({'success': success, 'message': message}),
status=500,
content_type='text/plain'
)