def cached_prinper(self, parent, principal, groups, permission): # Compute the permission, if any, for the principal. cache = self.cache(parent) try: cache_prin = cache.prin except AttributeError: cache_prin = cache.prin = {} cache_prin_per = cache_prin.get(principal) if not cache_prin_per: cache_prin_per = cache_prin[principal] = {} try: return cache_prin_per[permission] except KeyError: pass if parent is None: prinper = SettingAsBoolean[ globalPrincipalPermissionSetting(permission, principal, None)] cache_prin_per[permission] = prinper return prinper prinper = IPrincipalPermissionMap(parent, None) if prinper is not None: prinper = SettingAsBoolean[ prinper.getSetting(permission, principal, None)] if prinper is not None: cache_prin_per[permission] = prinper return prinper parent = removeSecurityProxy(getattr(parent, '__parent__', None)) prinper = self.cached_prinper(parent, principal, groups, permission) cache_prin_per[permission] = prinper return prinper
def cached_prinper(self, parent, principal, groups, permission): cache = self.cache(parent) try: cache_prin = cache.prin except AttributeError: cache_prin = cache.prin = {} cache_prin_per = cache_prin.get(principal) if not cache_prin_per: cache_prin_per = cache_prin[principal] = {} try: return cache_prin_per[permission] except KeyError: pass if parent is None: prinper = SettingAsBoolean[globalPrincipalPermissionSetting( permission, principal, None)] cache_prin_per[permission] = prinper return prinper prinper = IPrincipalPermissionMap(parent, None) if prinper is not None: prinper = SettingAsBoolean[prinper.getSetting( permission, principal, None)] if prinper is not None: cache_prin_per[permission] = prinper return prinper if getattr(parent, 'inherit_permissions', None): parent = removeSecurityProxy(getattr(parent, '__parent__', None)) prinper = self.cached_prinper(parent, principal, groups, permission) cache_prin_per[permission] = prinper return prinper prinper = SettingAsBoolean[globalPrincipalPermissionSetting( permission, principal, None)] cache_prin_per[permission] = prinper return prinper