diff --git a/ckan/logic/auth/publisher/__init__.py b/ckan/logic/auth/publisher/__init__.py index 83ff06105ea..d04a024b261 100644 --- a/ckan/logic/auth/publisher/__init__.py +++ b/ckan/logic/auth/publisher/__init__.py @@ -2,6 +2,14 @@ def _groups_intersect( groups_A, groups_B ): """ Return true if any of the groups in A are also in B (or size - of intersection > 0)""" - return len( set( groups_A ).intersection( set(groups_B) ) ) > 0 + of intersection > 0). If both are empty for now we will allow it """ + # TODO: Fix me. + + ga = set(groups_A) + gb = set(groups_B) + + if len(gb) + len(ga) == 0: + return True + + return len( ga.intersection( gb ) ) > 0 \ No newline at end of file diff --git a/ckan/logic/auth/publisher/update.py b/ckan/logic/auth/publisher/update.py index 8b56e6c4780..a912ac5a5bd 100644 --- a/ckan/logic/auth/publisher/update.py +++ b/ckan/logic/auth/publisher/update.py @@ -201,6 +201,7 @@ def task_status_update(context, data_dict): def package_update_rest(context, data_dict): model = context['model'] user = context['user'] + if user in (model.PSEUDO_USER__VISITOR, ''): return {'success': False, 'msg': _('Valid API key needed to edit a package')} diff --git a/ckan/model/group.py b/ckan/model/group.py index 784ea2f38e0..8c20c23ae16 100644 --- a/ckan/model/group.py +++ b/ckan/model/group.py @@ -141,11 +141,10 @@ def get_groups(self): import ckan.model as model if '_groups' not in self.__dict__: self._groups = model.Session.query(model.Group).\ - join(model.Member, model.Member.group_id == model.Group.id).\ - join(model.Group, model.Group.id == model.Member.table_id).\ - join(model.Package, model.Member.table_name == 'group' ).\ + join(model.Member, model.Member.group_id == self.id and \ + model.Member.table_name == 'group').\ filter(model.Member.state == 'active').\ - filter(model.Group.id == self.id).all() + filter(model.Member.table_id == self.id).all() return self._groups diff --git a/ckan/model/package.py b/ckan/model/package.py index 81e98f49f57..c39ea0d6990 100644 --- a/ckan/model/package.py +++ b/ckan/model/package.py @@ -505,11 +505,11 @@ def get_groups(self): import ckan.model as model if '_groups' not in self.__dict__: self._groups = model.Session.query(model.Group).\ - join(model.Member, model.Member.group_id == model.Group.id).\ + join(model.Member, model.Member.group_id == model.Group.id and \ + model.Member.table_name == 'package' ).\ join(model.Package, model.Package.id == model.Member.table_id).\ - join(model.Package, model.Member.table_name == 'package' ).\ filter(model.Member.state == 'active').\ - filter(model.Package.id == self.id).all() + filter(model.Member.table_id == self.id).all() return self._groups @property diff --git a/ckan/model/user.py b/ckan/model/user.py index 04e388fa675..04c9e45d8eb 100644 --- a/ckan/model/user.py +++ b/ckan/model/user.py @@ -152,11 +152,11 @@ def get_groups(self): import ckan.model as model if '_groups' not in self.__dict__: self._groups = model.Session.query(model.Group).\ - join(model.Member, model.Member.group_id == model.Group.id).\ + join(model.Member, model.Member.group_id == model.Group.id and\ + model.Member.table_name == 'user' ).\ join(model.User, model.User.id == model.Member.table_id).\ - join(model.Package, model.Member.table_name == 'user' ).\ filter(model.Member.state == 'active').\ - filter(model.User.id == self.id).all() + filter(model.Member.table_id == self.id).all() return self._groups @classmethod