def test_user_has_own_permissions(self): l_manager = ManageResourceOwnerPermissions(self.la) l_manager.set_owner_permissions_according_to_workflow() self.assertEqual( self._retrieve_resource_perms_definition(self.la).sort(), get_perms(self.user, self.la.get_self_resource()).sort())
def test_remove_and_add_perms(self): l_manager = ManageResourceOwnerPermissions(self.la) l_manager.set_owner_permissions_according_to_workflow() self.assertEqual(self._retrieve_resource_perms_definition(self.la, ['read', 'download']).sort(), get_perms(self.user, self.la.get_self_resource()).sort() ) self.la.is_approved = False self.la.save() l_manager.set_owner_permissions_according_to_workflow() self.assertEqual(self._retrieve_resource_perms_definition(self.la).sort(), get_perms(self.user, self.la.get_self_resource()).sort() )
def map_detail(request, mapid, template='maps/map_detail.html'): ''' The view that show details of each map ''' map_obj = _resolve_map(request, mapid, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) permission_manager = ManageResourceOwnerPermissions(map_obj) permission_manager.set_owner_permissions_according_to_workflow() # Add metadata_author or poc if missing map_obj.add_missing_metadata_author_or_poc() # Update count for popularity ranking, # but do not includes admins or resource owners if request.user != map_obj.owner and not request.user.is_superuser: Map.objects.filter(id=map_obj.id).update( popular_count=F('popular_count') + 1) config = map_obj.viewer_json(request) register_event(request, EventType.EVENT_VIEW, map_obj.title) config = json.dumps(config) layers = MapLayer.objects.filter(map=map_obj.id) links = map_obj.link_set.download() # Call this first in order to be sure "perms_list" is correct permissions_json = _perms_info_json(map_obj) perms_list = get_perms(request.user, map_obj.get_self_resource()) + get_perms( request.user, map_obj) group = None if map_obj.group: try: group = GroupProfile.objects.get(slug=map_obj.group.name) except GroupProfile.DoesNotExist: group = None access_token = None if request and request.user: access_token = get_or_create_token(request.user) if access_token and not access_token.is_expired(): access_token = access_token.token else: access_token = None context_dict = { 'access_token': access_token, 'config': config, 'resource': map_obj, 'group': group, 'layers': layers, 'perms_list': perms_list, 'permissions_json': permissions_json, "documents": get_related_documents(map_obj), 'links': links, 'preview': getattr(settings, 'GEONODE_CLIENT_LAYER_PREVIEW_LIBRARY', 'mapstore'), 'crs': getattr(settings, 'DEFAULT_MAP_CRS', 'EPSG:3857') } if settings.SOCIAL_ORIGINS: context_dict["social_links"] = build_social_links(request, map_obj) if request.user.is_authenticated: if getattr(settings, 'FAVORITE_ENABLED', False): from geonode.favorite.utils import get_favorite_info context_dict["favorite_info"] = get_favorite_info( request.user, map_obj) register_event(request, EventType.EVENT_VIEW, request.path) return render(request, template, context=context_dict)
def document_detail(request, docid): """ The view that show details of each document """ document = None try: document = _resolve_document(request, docid, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) except Http404: return HttpResponse(loader.render_to_string('404.html', context={}, request=request), status=404) except PermissionDenied: return HttpResponse(loader.render_to_string( '401.html', context={ 'error_message': _("You are not allowed to view this document.") }, request=request), status=403) if document is None: return HttpResponse('An unknown error has occured.', content_type="text/plain", status=401) else: permission_manager = ManageResourceOwnerPermissions(document) permission_manager.set_owner_permissions_according_to_workflow() # Add metadata_author or poc if missing document.add_missing_metadata_author_or_poc() related = get_related_resources(document) # Update count for popularity ranking, # but do not includes admins or resource owners if request.user != document.owner and not request.user.is_superuser: Document.objects.filter(id=document.id).update( popular_count=F('popular_count') + 1) metadata = document.link_set.metadata().filter( name__in=settings.DOWNLOAD_FORMATS_METADATA) # Call this first in order to be sure "perms_list" is correct permissions_json = _perms_info_json(document) perms_list = get_perms(request.user, document.get_self_resource()) + get_perms( request.user, document) group = None if document.group: try: group = GroupProfile.objects.get(slug=document.group.name) except ObjectDoesNotExist: group = None access_token = None if request and request.user: access_token = get_or_create_token(request.user) if access_token and not access_token.is_expired(): access_token = access_token.token else: access_token = None context_dict = { 'access_token': access_token, 'resource': document, 'perms_list': perms_list, 'permissions_json': permissions_json, 'group': group, 'metadata': metadata, 'imgtypes': IMGTYPES, 'related': related } if settings.SOCIAL_ORIGINS: context_dict["social_links"] = build_social_links( request, document) if getattr(settings, 'EXIF_ENABLED', False): try: from geonode.documents.exif.utils import exif_extract_dict exif = exif_extract_dict(document) if exif: context_dict['exif_data'] = exif except Exception: logger.error("Exif extraction failed.") if request.user.is_authenticated: if getattr(settings, 'FAVORITE_ENABLED', False): from geonode.favorite.utils import get_favorite_info context_dict["favorite_info"] = get_favorite_info( request.user, document) register_event(request, EventType.EVENT_VIEW, document) return render(request, "documents/document_detail.html", context=context_dict)
def document_detail(request, docid): """ The view that show details of each document """ try: document = _resolve_document(request, docid, 'base.view_resourcebase', _PERMISSION_MSG_VIEW) except PermissionDenied: return HttpResponse(_("Not allowed"), status=403) except Exception: raise Http404(_("Not found")) if not document: raise Http404(_("Not found")) permission_manager = ManageResourceOwnerPermissions(document) permission_manager.set_owner_permissions_according_to_workflow() # Add metadata_author or poc if missing document.add_missing_metadata_author_or_poc() related = get_related_resources(document) # Update count for popularity ranking, # but do not includes admins or resource owners if request.user != document.owner and not request.user.is_superuser: Document.objects.filter(id=document.id).update( popular_count=F('popular_count') + 1) metadata = document.link_set.metadata().filter( name__in=settings.DOWNLOAD_FORMATS_METADATA) # Call this first in order to be sure "perms_list" is correct permissions_json = _perms_info_json(document) perms_list = list(document.get_self_resource().get_user_perms( request.user).union(document.get_user_perms(request.user))) group = None if document.group: try: group = GroupProfile.objects.get(slug=document.group.name) except ObjectDoesNotExist: group = None access_token = None if request and request.user: access_token = get_or_create_token(request.user) if access_token and not access_token.is_expired(): access_token = access_token.token else: access_token = None AUDIOTYPES = [_e for _e, _t in DOCUMENT_TYPE_MAP.items() if _t == 'audio'] IMGTYPES = [_e for _e, _t in DOCUMENT_TYPE_MAP.items() if _t == 'image'] VIDEOTYPES = [_e for _e, _t in DOCUMENT_TYPE_MAP.items() if _t == 'video'] context_dict = { 'access_token': access_token, 'resource': document, 'perms_list': perms_list, 'permissions_json': permissions_json, 'group': group, 'metadata': metadata, 'audiotypes': AUDIOTYPES, 'imgtypes': IMGTYPES, 'videotypes': VIDEOTYPES, 'mimetypemap': DOCUMENT_MIMETYPE_MAP, 'related': related } if settings.SOCIAL_ORIGINS: context_dict["social_links"] = build_social_links(request, document) if getattr(settings, 'EXIF_ENABLED', False): try: from geonode.documents.exif.utils import exif_extract_dict exif = exif_extract_dict(document) if exif: context_dict['exif_data'] = exif except Exception: logger.debug("Exif extraction failed.") if request.user.is_authenticated: if getattr(settings, 'FAVORITE_ENABLED', False): from geonode.favorite.utils import get_favorite_info context_dict["favorite_info"] = get_favorite_info( request.user, document) register_event(request, EventType.EVENT_VIEW, document) return render(request, "documents/document_detail.html", context=context_dict)