diff --git a/src/collective/z3cform/rolefield/field.py b/src/collective/z3cform/rolefield/field.py index 9981130..a962271 100644 --- a/src/collective/z3cform/rolefield/field.py +++ b/src/collective/z3cform/rolefield/field.py @@ -57,6 +57,20 @@ class LocalRolesToPrincipalsDataManager(AttributeField): """A data manager which set local roles when saving the field.""" adapts(Interface, ILocalRolesToPrincipals) + def get(self): + # get value from the actual local roles, in case it has been modified + # by an external process + roles_to_assign = frozenset(self.field.roles_to_assign) + + value = [] + for local_role in self.context.get_local_roles(): + # a local_role is like ('Administrators', (u'Contributor', u'Reviewer')) + principal = local_role[0] + local_roles = frozenset(local_role[1]) + if roles_to_assign.issubset(local_roles): + value.append(principal) + return value + def set(self, value): """See z3c.form.interfaces.IDataManager""" # set local roles before setting the value so we still have access to the old value