diff --git a/api/handlers/listhandler.py b/api/handlers/listhandler.py index 5da8dd75464f8f27c45a6213ea5d5c9b026be5e3..fb2d51803d736d48b1b7a5e915596a086b2fc100 100644 --- a/api/handlers/listhandler.py +++ b/api/handlers/listhandler.py @@ -229,6 +229,7 @@ class PermissionsListHandler(ListHandler): payload['_id'] = kwargs.get('_id') if cont_name == 'groups' and self.request.params.get('propagate') =='true': self._propagate_permissions(cont_name, _id, query={'permissions._id' : payload['_id']}, update={'$set': {'permissions.$.access': payload['access']}}) + self._propagate_permissions(cont_name, _id, query={'permissions._id': {'$ne': payload['_id']}}, update={'$addToSet': {'permissions': payload}}) elif cont_name != 'groups': self._propagate_permissions(cont_name, _id) return result diff --git a/test/integration_tests/python/test_propagation.py b/test/integration_tests/python/test_propagation.py index 735cdb9bb899b8084e2388b1514493ccf387b105..81c8cb58002a70e1a587e8eb71a6df4f2fe0ea30 100644 --- a/test/integration_tests/python/test_propagation.py +++ b/test/integration_tests/python/test_propagation.py @@ -212,6 +212,12 @@ def test_add_and_remove_user_group_permission(data_builder, as_admin): r = as_admin.post('/groups/' + group + '/permissions', json=payload, params={'propagate': 'true'}) assert r.ok + # Add project without default group perms + r = as_admin.post('/projects', params={'inherit': 'false'}, json={'label': 'project2', 'group': group}) + assert r.ok + project2 = r.json()['_id'] + + r = as_admin.get('/groups/' + group) perms = r.json()['permissions'] user = get_user_in_perms(perms, user_id) @@ -248,6 +254,11 @@ def test_add_and_remove_user_group_permission(data_builder, as_admin): user = get_user_in_perms(perms, user_id) assert r.ok and user and user['access'] == 'rw' + r = as_admin.get('/projects/' + project2) + perms = r.json()['permissions'] + user = get_user_in_perms(perms, user_id) + assert r.ok and user and user['access'] == 'rw' + r = as_admin.get('/sessions/' + session) perms = r.json()['permissions'] user = get_user_in_perms(perms, user_id) @@ -282,6 +293,10 @@ def test_add_and_remove_user_group_permission(data_builder, as_admin): user = get_user_in_perms(perms, user_id) assert r.ok and user is None + # Delete empty project 2 + r= as_admin.delete('/projects/' + project2) + assert r.ok + # Test tag pool renaming and deletion def test_add_rename_remove_group_tag(data_builder, as_admin): """