From 89ee8fda4b2732ebca26c0d4bedf6c722c640ca9 Mon Sep 17 00:00:00 2001 From: tobes Date: Wed, 27 Mar 2013 12:23:23 +0000 Subject: [PATCH] [#509] Fix bug in add/remove groups --- ckan/lib/dictization/model_save.py | 35 ++++++++++++++++++------------ 1 file changed, 21 insertions(+), 14 deletions(-) diff --git a/ckan/lib/dictization/model_save.py b/ckan/lib/dictization/model_save.py index a87b53eb4dc..b43c49ffb78 100644 --- a/ckan/lib/dictization/model_save.py +++ b/ckan/lib/dictization/model_save.py @@ -233,29 +233,36 @@ def package_membership_list_save(group_dicts, package, context): ## need to flush so we can get out the package id model.Session.flush() - for group in groups - set(group_member.keys()): - if group: - member_obj = model.Member(table_id = package.id, - table_name = 'package', - group = group, - capacity = capacity, - group_id=group.id, - state = 'active') - session.add(member_obj) + + # Remove any groups we are no longer in for group in set(group_member.keys()) - groups: member_obj = group_member[group] + if member_obj and member_obj.state == 'deleted': + continue if new_authz.has_user_permission_for_group_or_org( member_obj.group_id, user, 'read'): member_obj.capacity = capacity member_obj.state = 'deleted' session.add(member_obj) - for group in set(group_member.keys()) & groups: - member_obj = group_member[group] + # Add any new groups + for group in groups: + member_obj = group_member.get(group) + if member_obj and member_obj.state == 'active': + continue if new_authz.has_user_permission_for_group_or_org( - member_obj.group_id, user, 'read'): - member_obj.capacity = capacity - member_obj.state = 'active' + group.id, user, 'read'): + member_obj = group_member.get(group) + if member_obj: + member_obj.capacity = capacity + member_obj.state = 'active' + else: + member_obj = model.Member(table_id=package.id, + table_name='package', + group=group, + capacity=capacity, + group_id=group.id, + state = 'active') session.add(member_obj)