revert some changes; provide optional logging of acquired security settings
This commit is contained in:
parent
8d66ee3830
commit
2c548a3df6
1 changed files with 15 additions and 8 deletions
|
@ -21,6 +21,7 @@ Base classes for security setters, i.e. adapters that provide standardized
|
||||||
methods for setting role permissions and other security-related stuff.
|
methods for setting role permissions and other security-related stuff.
|
||||||
"""
|
"""
|
||||||
|
|
||||||
|
from logging import getLogger
|
||||||
from zope.app.security.settings import Allow, Deny, Unset
|
from zope.app.security.settings import Allow, Deny, Unset
|
||||||
from zope.app.securitypolicy.interfaces import \
|
from zope.app.securitypolicy.interfaces import \
|
||||||
IRolePermissionMap, IRolePermissionManager, \
|
IRolePermissionMap, IRolePermissionManager, \
|
||||||
|
@ -43,6 +44,8 @@ from loops.security.common import getOption
|
||||||
from loops.security.interfaces import ISecuritySetter
|
from loops.security.interfaces import ISecuritySetter
|
||||||
from loops.versioning.interfaces import IVersionable
|
from loops.versioning.interfaces import IVersionable
|
||||||
|
|
||||||
|
logger = getLogger('loops.security')
|
||||||
|
|
||||||
|
|
||||||
class BaseSecuritySetter(object):
|
class BaseSecuritySetter(object):
|
||||||
|
|
||||||
|
@ -142,16 +145,16 @@ class LoopsObjectSecuritySetter(BaseSecuritySetter):
|
||||||
|
|
||||||
def acquireRolePermissions(self):
|
def acquireRolePermissions(self):
|
||||||
settings = {}
|
settings = {}
|
||||||
rpm = self.rolePermissionManager
|
#rpm = IRolePermissionMap(self.baseObject)
|
||||||
for p, r, s in rpm.getRolesAndPermissions():
|
#for p, r, s in rpm.getRolesAndPermissions():
|
||||||
settings[(p, r)] = s
|
# settings[(p, r)] = s
|
||||||
for p in self.parents:
|
for parent in self.parents:
|
||||||
if p == self.baseObject:
|
if parent == self.baseObject:
|
||||||
continue
|
continue
|
||||||
if getOption(p, 'security.no_propagate', checkType=False):
|
if getOption(parent, 'security.no_propagate', checkType=False):
|
||||||
continue
|
continue
|
||||||
secProvider = p
|
secProvider = parent
|
||||||
wi = p.workspaceInformation
|
wi = parent.workspaceInformation
|
||||||
if wi:
|
if wi:
|
||||||
if wi.propagateRolePermissions == 'none':
|
if wi.propagateRolePermissions == 'none':
|
||||||
continue
|
continue
|
||||||
|
@ -161,6 +164,10 @@ class LoopsObjectSecuritySetter(BaseSecuritySetter):
|
||||||
for p, r, s in rpm.getRolesAndPermissions():
|
for p, r, s in rpm.getRolesAndPermissions():
|
||||||
current = settings.get((p, r))
|
current = settings.get((p, r))
|
||||||
if current is None or overrides(s, current):
|
if current is None or overrides(s, current):
|
||||||
|
if self.globalOptions('security.log_acquired_setting'):
|
||||||
|
logger.info('*** %s: %s, %s: current %s; new from %s: %s' %
|
||||||
|
(self.baseObject.__name__, p, r, current,
|
||||||
|
parent.__name__, s))
|
||||||
settings[(p, r)] = s
|
settings[(p, r)] = s
|
||||||
self.setDefaultRolePermissions()
|
self.setDefaultRolePermissions()
|
||||||
self.setRolePermissions(settings)
|
self.setRolePermissions(settings)
|
||||||
|
|
Loading…
Add table
Reference in a new issue