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.
|
||||
"""
|
||||
|
||||
from logging import getLogger
|
||||
from zope.app.security.settings import Allow, Deny, Unset
|
||||
from zope.app.securitypolicy.interfaces import \
|
||||
IRolePermissionMap, IRolePermissionManager, \
|
||||
|
@ -43,6 +44,8 @@ from loops.security.common import getOption
|
|||
from loops.security.interfaces import ISecuritySetter
|
||||
from loops.versioning.interfaces import IVersionable
|
||||
|
||||
logger = getLogger('loops.security')
|
||||
|
||||
|
||||
class BaseSecuritySetter(object):
|
||||
|
||||
|
@ -142,16 +145,16 @@ class LoopsObjectSecuritySetter(BaseSecuritySetter):
|
|||
|
||||
def acquireRolePermissions(self):
|
||||
settings = {}
|
||||
rpm = self.rolePermissionManager
|
||||
for p, r, s in rpm.getRolesAndPermissions():
|
||||
settings[(p, r)] = s
|
||||
for p in self.parents:
|
||||
if p == self.baseObject:
|
||||
#rpm = IRolePermissionMap(self.baseObject)
|
||||
#for p, r, s in rpm.getRolesAndPermissions():
|
||||
# settings[(p, r)] = s
|
||||
for parent in self.parents:
|
||||
if parent == self.baseObject:
|
||||
continue
|
||||
if getOption(p, 'security.no_propagate', checkType=False):
|
||||
if getOption(parent, 'security.no_propagate', checkType=False):
|
||||
continue
|
||||
secProvider = p
|
||||
wi = p.workspaceInformation
|
||||
secProvider = parent
|
||||
wi = parent.workspaceInformation
|
||||
if wi:
|
||||
if wi.propagateRolePermissions == 'none':
|
||||
continue
|
||||
|
@ -161,6 +164,10 @@ class LoopsObjectSecuritySetter(BaseSecuritySetter):
|
|||
for p, r, s in rpm.getRolesAndPermissions():
|
||||
current = settings.get((p, r))
|
||||
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
|
||||
self.setDefaultRolePermissions()
|
||||
self.setRolePermissions(settings)
|
||||
|
|
Loading…
Add table
Reference in a new issue