def setGroupProperties(self, mapping): """PAS-specific method to set the properties of a group. """ sheets = None if not IPluggableAuthService.providedBy(self.acl_users): # Defer to base impl in absence of PAS, a PAS group, or # property sheets return BaseGroupData.setGroupProperties(self, mapping) else: # It's a PAS! Whee! group = self.getGroup() sheets = getattr(group, 'getOrderedPropertySheets', lambda: None)() # We won't always have PlonePAS groups, due to acquisition, # nor are guaranteed property sheets if not sheets: # Defer to base impl if we have a PAS but no property # sheets. return BaseGroupData.setGroupProperties(self, mapping) # If we got this far, we have a PAS and some property sheets. # XXX track values set to defer to default impl # property routing? modified = False for k, v in mapping.items(): for sheet in sheets: if not sheet.hasProperty(k): continue if IMutablePropertySheet.providedBy(sheet): sheet.setProperty(group, k, v) modified = True else: raise RuntimeError, ("Mutable property provider " "shadowed by read only provider") if modified: self.notifyModified()
def getProperty(self, id, default=_marker): """PAS-specific method to fetch a group's properties. Looks through the ordered property sheets. """ sheets = None if not IPluggableAuthService.providedBy(self.acl_users): return BaseGroupData.getProperty(self, id) else: # It's a PAS! Whee! group = self.getGroup() sheets = getattr(group, 'getOrderedPropertySheets', lambda: None)() # we won't always have PlonePAS groups, due to acquisition, # nor are guaranteed property sheets if not sheets: return BaseGroupData.getProperty(self, id) # If we made this far, we found a PAS and some property sheets. for sheet in sheets: if sheet.hasProperty(id): # Return the first one that has the property. return sheet.getProperty(id) # Couldn't find the property in the property sheets. Try to # delegate back to the base implementation. return BaseGroupData.getProperty(self, id, default)