def test_set_unset_group_layer_permissions(self): """ Test that group permissions are set for layers """ self.client.login(username="******", password="******") response = self.client.post(reverse('set_group_layer_permissions'), data={ 'ids': self.group_ids, 'layers': self.layer_ids, 'permission_type': self.permission_type, 'mode': 'set' }) self.assertEqual(response.status_code, 302) with transaction.atomic(): for permissions_name in self.permission_type: utils.set_layers_permissions(permissions_name, [ resource.name for resource in Layer.objects.filter( id__in=[int(_id) for _id in self.layer_ids]) ], [], [ group.name for group in Group.objects.filter( id__in=self.group_ids.split(",")) ], False, verbose=True) for layer in self.layers: perm_spec = layer.get_all_level_info() self.assertTrue(self.groups[0] in perm_spec["groups"])
def set_permissions(self, permissions_names, resources_names, users_usernames, groups_names, delete_flag): from geonode.layers.utils import set_layers_permissions with transaction.atomic(): for permissions_name in permissions_names: set_layers_permissions(permissions_name, resources_names, users_usernames, groups_names, delete_flag)
def test_unset_group_layer_perms(self): """ Test that group permissions are unset for layers """ user = get_user_model().objects.all()[0] for layer in self.layers: layer.set_permissions({'users': {user.username: [ 'change_layer_data', 'view_resourcebase', 'download_resourcebase', 'change_resourcebase_metadata']}}) self.client.login(username="******", password="******") response = self.client.post(reverse('set_user_layer_permissions'), data={ 'ids': self.user_ids, 'layers': self.layer_ids, 'permission_type': self.permission_type, 'mode': 'unset' }) self.assertEqual(response.status_code, 302) with transaction.atomic(): for permissions_name in self.permission_type: utils.set_layers_permissions( permissions_name, [resource.name for resource in Layer.objects.filter( id__in=[int(_id) for _id in self.layer_ids])], [user.username for user in get_user_model().objects.filter(id__in=self.user_ids.split(","))], [], True, verbose=True ) for layer in self.layers: perm_spec = layer.get_all_level_info() self.assertTrue(user not in perm_spec["users"])
def handle(self, *args, **options): # Retrieving the arguments resources_names = options.get('resources') permissions_name = options.get('permission') users_usernames = options.get('users') groups_names = options.get('groups') delete_flag = options.get('delete_flag') set_layers_permissions(permissions_name, resources_names, users_usernames, groups_names, delete_flag)
def test_base_resources(self): """ Ensure we can access the Resource Base list. """ url = reverse('base-resources-list') # Anonymous response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 26) # Pagination self.assertEqual(len(response.data['resources']), 10) logger.debug(response.data) # Remove public permissions to Layers from geonode.layers.utils import set_layers_permissions set_layers_permissions( "read", # permissions_name None, # resources_names == None (all layers) [get_anonymous_user()], # users_usernames None, # groups_names True, # delete_flag ) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 18) # Pagination self.assertEqual(len(response.data['resources']), 10) # Admin self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 18) # Pagination self.assertEqual(len(response.data['resources']), 10) logger.debug(response.data) # Bobby self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 18) # Pagination self.assertEqual(len(response.data['resources']), 10) logger.debug(response.data) # Norman self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 18) # Pagination self.assertEqual(len(response.data['resources']), 10) logger.debug(response.data) # Pagination # Admin self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(f"{url}?page_size=17", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 18) # Pagination self.assertEqual(len(response.data['resources']), 17) # Check user permissions resource = ResourceBase.objects.filter(owner__username='******').first() # Admin response = self.client.get(f"{url}/{resource.id}/", format='json') self.assertTrue( 'change_resourcebase' in list(response.data['resource']['perms'])) # Annonymous self.assertIsNone(self.client.logout()) response = self.client.get(f"{url}/{resource.id}/", format='json') self.assertFalse( 'change_resourcebase' in list(response.data['resource']['perms'])) # user owner self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(f"{url}/{resource.id}/", format='json') self.assertTrue( 'change_resourcebase' in list(response.data['resource']['perms'])) # user not owner and not assigned self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(f"{url}/{resource.id}/", format='json') self.assertFalse( 'change_resourcebase' in list(response.data['resource']['perms']))
def test_base_resources(self): """ Ensure we can access the Resource Base list. """ url = reverse('base-resources-list') # Anonymous response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 26) # Pagination self.assertEqual(len(response.data['resources']), 10) logger.debug(response.data) # Remove public permissions to Layers from geonode.layers.utils import set_layers_permissions set_layers_permissions( "read", # permissions_name None, # resources_names == None (all layers) [get_anonymous_user()], # users_usernames None, # groups_names True, # delete_flag ) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 18) # Pagination self.assertEqual(len(response.data['resources']), 10) # Admin self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 26) # Pagination self.assertEqual(len(response.data['resources']), 10) logger.debug(response.data) # Bobby self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 20) # Pagination self.assertEqual(len(response.data['resources']), 10) logger.debug(response.data) # Norman self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 19) # Pagination self.assertEqual(len(response.data['resources']), 10) logger.debug(response.data) # Pagination # Admin self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(f"{url}?page_size=17", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 26) # Pagination self.assertEqual(len(response.data['resources']), 17)
def test_base_resources(self): """ Ensure we can access the Resource Base list. """ url = reverse('base-resources-list') # Anonymous response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 26) # Pagination self.assertEqual(len(response.data['resources']), 10) logger.debug(response.data) # Remove public permissions to Layers from geonode.layers.utils import set_layers_permissions set_layers_permissions( "read", # permissions_name None, # resources_names == None (all layers) [get_anonymous_user()], # users_usernames None, # groups_names True, # delete_flag ) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 18) # Pagination self.assertEqual(len(response.data['resources']), 10) # Admin self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 26) # Pagination self.assertEqual(len(response.data['resources']), 10) logger.debug(response.data) # Bobby self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 20) # Pagination self.assertEqual(len(response.data['resources']), 10) logger.debug(response.data) # Norman self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 19) # Pagination self.assertEqual(len(response.data['resources']), 10) logger.debug(response.data) # Pagination # Admin self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(f"{url}?page_size=17", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 26) # Pagination self.assertEqual(len(response.data['resources']), 17) # Search # Admin self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get( f"{url}?search=ca&search_fields=title&search_fields=abstract", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 1) # Pagination self.assertEqual(len(response.data['resources']), 1) # Filtering # Admin self.assertTrue(self.client.login(username='******', password='******')) # Filter by owner == bobby response = self.client.get(f"{url}?filter{{owner.username}}=bobby", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 6) # Pagination self.assertEqual(len(response.data['resources']), 6) # Filter by resource_type == document response = self.client.get(f"{url}?filter{{resource_type}}=document", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 9) # Pagination self.assertEqual(len(response.data['resources']), 9) # Filter by resource_type == layer and title like 'common morx' response = self.client.get( f"{url}?filter{{resource_type}}=layer&filter{{title.icontains}}=common morx", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 1) # Pagination self.assertEqual(len(response.data['resources']), 1) # Filter by Keywords response = self.client.get(f"{url}?filter{{keywords.name}}=here", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 1) # Pagination self.assertEqual(len(response.data['resources']), 1) # Filter by Metadata Regions response = self.client.get( f"{url}?filter{{regions.name.icontains}}=Italy", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 0) # Pagination self.assertEqual(len(response.data['resources']), 0) # Filter by Metadata Categories response = self.client.get( f"{url}?filter{{category.identifier}}=elevation", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 9) # Pagination self.assertEqual(len(response.data['resources']), 9) # Extent Filter response = self.client.get( f"{url}?page_size=26&extent=-180,-90,180,90", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 26) # Pagination self.assertEqual(len(response.data['resources']), 26) response = self.client.get(f"{url}?page_size=26&extent=0,0,100,100", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 26) # Pagination self.assertEqual(len(response.data['resources']), 26) response = self.client.get(f"{url}?page_size=26&extent=-10,-10,-1,-1", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 12) # Pagination self.assertEqual(len(response.data['resources']), 12) # Extent Filter: Crossing Dateline extent = "-180.0000,56.9689,-162.5977,70.7435,155.9180,56.9689,180.0000,70.7435" response = self.client.get(f"{url}?page_size=26&extent={extent}", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 12) # Pagination self.assertEqual(len(response.data['resources']), 12) # Sorting # Admin self.assertTrue(self.client.login(username='******', password='******')) response = self.client.get(f"{url}?sort[]=title", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 26) # Pagination self.assertEqual(len(response.data['resources']), 10) resource_titles = [] for _r in response.data['resources']: resource_titles.append(_r['title']) sorted_resource_titles = sorted(resource_titles.copy()) self.assertEqual(resource_titles, sorted_resource_titles) response = self.client.get(f"{url}?sort[]=-title", format='json') self.assertEqual(response.status_code, 200) self.assertEqual(len(response.data), 5) self.assertEqual(response.data['total'], 26) # Pagination self.assertEqual(len(response.data['resources']), 10) resource_titles = [] for _r in response.data['resources']: resource_titles.append(_r['title']) reversed_resource_titles = sorted(resource_titles.copy()) self.assertNotEqual(resource_titles, reversed_resource_titles) # Get & Set Permissions # Admin self.assertTrue(self.client.login(username='******', password='******')) resource = ResourceBase.objects.filter(owner__username='******').first() url = reverse('base-resources-detail', kwargs={'pk': resource.pk}) response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) self.assertEqual(int(response.data['resource']['pk']), int(resource.pk)) url = urljoin( f"{reverse('base-resources-detail', kwargs={'pk': resource.pk})}/", 'get_perms/') response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) resource_perm_spec = response.data self.assertTrue('bobby' in resource_perm_spec['users']) self.assertFalse('norman' in resource_perm_spec['users']) # Add perms to Norman url = urljoin( f"{reverse('base-resources-detail', kwargs={'pk': resource.pk})}/", 'set_perms/') resource_perm_spec['users']['norman'] = resource_perm_spec['users'][ 'bobby'] response = self.client.put(url, data=resource_perm_spec, format='json') self.assertEqual(response.status_code, 200) url = urljoin( f"{reverse('base-resources-detail', kwargs={'pk': resource.pk})}/", 'get_perms/') response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) resource_perm_spec = response.data self.assertTrue('norman' in resource_perm_spec['users']) # Remove perms to Norman url = urljoin( f"{reverse('base-resources-detail', kwargs={'pk': resource.pk})}/", 'set_perms/') resource_perm_spec['users']['norman'] = [] response = self.client.put(url, data=resource_perm_spec, format='json') self.assertEqual(response.status_code, 200) url = urljoin( f"{reverse('base-resources-detail', kwargs={'pk': resource.pk})}/", 'get_perms/') response = self.client.get(url, format='json') self.assertEqual(response.status_code, 200) resource_perm_spec = response.data self.assertFalse('norman' in resource_perm_spec['users'])