def canWriteProperty(self, prop_name): """True iff the member/group property named in 'prop_name' can be changed. """ if not IPluggableAuthService.providedBy(self._tool.acl_users): # not PAS; Memberdata is writable return self._memberdataHasProperty(prop_name) else: # it's PAS user = self.getUser() sheets = getattr(user, 'getOrderedPropertySheets', lambda: None)() if not sheets: return self._memberdataHasProperty(prop_name) for sheet in sheets: if not sheet.hasProperty(prop_name): continue if IMutablePropertySheet.providedBy(sheet): # BBB for plugins implementing an older version of # IMutablePropertySheet if hasattr(sheet, 'canWriteProperty'): return sheet.canWriteProperty(user, prop_name) return True else: break # shadowed by read-only return False
def canWriteProperty(self, prop_name): """True iff the member/group property named in 'prop_name' can be changed. """ if not IPluggableAuthService.providedBy(self.acl_users): # not PAS; Memberdata is writable return self._memberdataHasProperty(prop_name) else: # it's PAS user = self.getUser() sheets = getattr(user, 'getOrderedPropertySheets', lambda: None)() if not sheets: return self._memberdataHasProperty(prop_name) for sheet in sheets: if not sheet.hasProperty(prop_name): continue if IMutablePropertySheet.providedBy(sheet): # BBB for plugins implementing an older version of # IMutablePropertySheet if hasattr(sheet, 'canWriteProperty'): return sheet.canWriteProperty(user, prop_name) return True else: break # shadowed by read-only return False
def set(self, name, instance, value, **kwargs): user = instance.getUser() sheets = user.getOrderedSheets() for sheet in sheets: if sheet.hasProperty(name): if IMutablePropertySheet.providedBy(sheet): sheet.setProperty(name, value) else: raise RuntimeError("mutable property provider shadowed by read only provider")
def setProperties(self, properties=None, **kw): if properties is None: properties = kw for sheet in self.getOrderedPropertySheets(): if not IMutablePropertySheet.providedBy(sheet): continue update = {} for (key, value) in kw.items(): if sheet.hasProperty(key): update[key] = value del kw[key] if update: sheet.setProperties(self, update)
def setMemberProperties(self, mapping, force_local=0): """ PAS-specific method to set the properties of a member. Ignores 'force_local', which is not reliably present. """ sheets = None # We could pay attention to force_local here... if not IPluggableAuthService.providedBy(self.acl_users): # Defer to base impl in absence of PAS, a PAS user, or # property sheets return BaseMemberData.setMemberProperties(self, mapping) else: # It's a PAS! Whee! user = self.getUser() sheets = getattr(user, 'getOrderedPropertySheets', lambda: None)() # We won't always have PlonePAS users, 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 BaseMemberData.setMemberProperties(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(): if v is None: continue for sheet in sheets: if not sheet.hasProperty(k): continue if IMutablePropertySheet.providedBy(sheet): sheet.setProperty(user, k, v) modified = True else: break # raise RuntimeError, ("Mutable property provider " # "shadowed by read only provider") if modified: self.notifyModified() # Genweb: Updated by patch notify(PropertiesUpdated(user, mapping))
def setMemberProperties(self, mapping, force_local=0): """PAS-specific method to set the properties of a member. Ignores 'force_local', which is not reliably present. """ sheets = None # We could pay attention to force_local here... if not IPluggableAuthService.providedBy(self.acl_users): # Defer to base impl in absence of PAS, a PAS user, or # property sheets return BaseMemberData.setMemberProperties(self, mapping) else: # It's a PAS! Whee! user = self.getUser() sheets = getattr(user, 'getOrderedPropertySheets', lambda: None)() # We won't always have PlonePAS users, 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 BaseMemberData.setMemberProperties(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(): if v == None: continue for sheet in sheets: if not sheet.hasProperty(k): continue if IMutablePropertySheet.providedBy(sheet): sheet.setProperty(user, k, v) modified = True else: break # raise RuntimeError, ("Mutable property provider " # "shadowed by read only provider") if modified: self.notifyModified() # Genweb: Updated by patch notify(PropertiesUpdated(user, mapping))
def setMemberProperties(self, mapping, force_local=0, force_empty=False): """PAS-specific method to set the properties of a member. Ignores 'force_local', which is not reliably present. """ sheets = None # We could pay attention to force_local here... if not IPluggableAuthService.providedBy(self._tool.acl_users): # Defer to base impl in absence of PAS, a PAS user, or # property sheets return BaseMemberAdapter.setMemberProperties(self, mapping) else: # It's a PAS! Whee! user = self.getUser() sheets = getattr(user, 'getOrderedPropertySheets', lambda: None)() # We won't always have PlonePAS users, 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 BaseMemberAdapter.setMemberProperties(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(): if v is None and not force_empty: continue for sheet in sheets: if not sheet.hasProperty(k): continue if IMutablePropertySheet.providedBy(sheet): sheet.setProperty(user, k, v) modified = True else: break if modified: self.notifyModified() # Trigger PropertiesUpdated event when member properties are updated, # excluding user login events if not set(mapping.keys()) & set(('login_time', 'last_login_time')): notify(PropertiesUpdated(self, mapping))
def canWriteProperty(self, prop_name): """True iff the group property named in 'prop_name' can be changed. """ # this looks almost exactly like in memberdata. refactor? if not IPluggableAuthService.providedBy(self.acl_users): # not PAS; Groupdata is writable return self._groupdataHasProperty(prop_name) else: # it's PAS group = self.getGroup() sheets = getattr(group, 'getOrderedPropertySheets', lambda: [])() for sheet in sheets: if not sheet.hasProperty(prop_name): continue if IMutablePropertySheet.providedBy(sheet): return 1 else: break # shadowed by read-only return 0
def setProperties(self, properties=None, **kw): """ Set properties on a given user. Accepts either keyword arguments or a mapping for the ``properties`` argument. The ``properties`` argument will take precedence over keyword arguments if both are provided; no merging will occur. """ if properties is None: properties = kw for sheet in self.getOrderedPropertySheets(): if not IMutablePropertySheet.providedBy(sheet): continue update = {} for (key, value) in list(properties.items()): if sheet.hasProperty(key): update[key] = value del properties[key] if update: sheet.setProperties(self, update)
def setProperties(self, properties=None, **kw): """ Set properties on a given user. Accepts either keyword arguments or a mapping for the ``properties`` argument. The ``properties`` argument will take precedence over keyword arguments if both are provided; no merging will occur. """ if properties is None: properties = kw for sheet in self.getOrderedPropertySheets(): if not IMutablePropertySheet.providedBy(sheet): continue update = {} for (key, value) in properties.items(): if sheet.hasProperty(key): update[key] = value del properties[key] if update: sheet.setProperties(self, update)
def set_last_modification_date(member): """Set the last_modification_date of the member. Adapted from PlonePAS.tools.memberdata.MemberData.setMemberProperties. """ user = member.getUser() sheets = getattr(user, 'getOrderedPropertySheets', lambda: None)() # We won't always have PlonePAS users, due to acquisition, # nor are guaranteed property sheets if not sheets: return # If we got this far, we have a PAS and some property sheets. property_id = 'last_modification_date' value = DateTime() for sheet in sheets: if not sheet.hasProperty(property_id): continue if IMutablePropertySheet.providedBy(sheet): sheet.setProperty(user, property_id, value) break
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 self._gruf_setGroupProperties(mapping) else: # It's a PAS! Whee! group = self.getGroup() sheets = getattr(group, 'getOrderedPropertySheets', lambda: [])() # 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 self._gruf_setGroupProperties(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 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 self._gruf_setGroupProperties(mapping) else: # It's a PAS! Whee! group = self.getGroup() sheets = getattr(group, 'getOrderedPropertySheets', lambda: [])() # 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 self._gruf_setGroupProperties(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 list(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()