fix swapping of role and principal; other minor improvements
This commit is contained in:
parent
3fa9cee5e6
commit
e52543ce8b
1 changed files with 12 additions and 10 deletions
|
@ -38,7 +38,7 @@ from loops.config.base import DummyOptions
|
||||||
from loops.interfaces import IConceptSchema, IBaseResourceSchema, ILoopsAdapter
|
from loops.interfaces import IConceptSchema, IBaseResourceSchema, ILoopsAdapter
|
||||||
from loops.organize.util import getPrincipalFolder, getGroupsFolder, getGroupId
|
from loops.organize.util import getPrincipalFolder, getGroupsFolder, getGroupId
|
||||||
from loops.security.common import overrides, setRolePermission, setPrincipalRole
|
from loops.security.common import overrides, setRolePermission, setPrincipalRole
|
||||||
from loops.security.common import acquiringPredicateNames
|
from loops.security.common import allRolesExceptOwner, acquiringPredicateNames
|
||||||
from loops.security.interfaces import ISecuritySetter
|
from loops.security.interfaces import ISecuritySetter
|
||||||
from loops.versioning.interfaces import IVersionable
|
from loops.versioning.interfaces import IVersionable
|
||||||
|
|
||||||
|
@ -157,11 +157,13 @@ class LoopsObjectSecuritySetter(BaseSecuritySetter):
|
||||||
setRolePermission(self.rolePermissionManager, p, r, s)
|
setRolePermission(self.rolePermissionManager, p, r, s)
|
||||||
|
|
||||||
def acquirePrincipalRoles(self):
|
def acquirePrincipalRoles(self):
|
||||||
|
#if baseObject(self.context).workspaceInformation:
|
||||||
|
# return # do not remove/overwrite workspace settings
|
||||||
settings = {}
|
settings = {}
|
||||||
for p in self.parents:
|
for parent in self.parents:
|
||||||
if p == self.baseObject:
|
if parent == self.baseObject:
|
||||||
continue
|
continue
|
||||||
wi = p.workspaceInformation
|
wi = parent.workspaceInformation
|
||||||
if wi:
|
if wi:
|
||||||
if not wi.propagateParentSecurity:
|
if not wi.propagateParentSecurity:
|
||||||
continue
|
continue
|
||||||
|
@ -169,12 +171,12 @@ class LoopsObjectSecuritySetter(BaseSecuritySetter):
|
||||||
for r, p, s in prm.getPrincipalsAndRoles():
|
for r, p, s in prm.getPrincipalsAndRoles():
|
||||||
current = settings.get((r, p))
|
current = settings.get((r, p))
|
||||||
if current is None or overrides(s, current):
|
if current is None or overrides(s, current):
|
||||||
settings[(p, r)] = s
|
settings[(r, p)] = s
|
||||||
prm = IPrincipalRoleMap(p)
|
prm = IPrincipalRoleMap(parent)
|
||||||
for r, p, s in prm.getPrincipalsAndRoles():
|
for r, p, s in prm.getPrincipalsAndRoles():
|
||||||
current = settings.get((r, p))
|
current = settings.get((r, p))
|
||||||
if current is None or overrides(s, current):
|
if current is None or overrides(s, current):
|
||||||
settings[(p, r)] = s
|
settings[(r, p)] = s
|
||||||
self.setDefaultPrincipalRoles()
|
self.setDefaultPrincipalRoles()
|
||||||
for setter in self.versionSetters:
|
for setter in self.versionSetters:
|
||||||
setter.setPrincipalRoles(settings)
|
setter.setPrincipalRoles(settings)
|
||||||
|
@ -185,10 +187,10 @@ class LoopsObjectSecuritySetter(BaseSecuritySetter):
|
||||||
|
|
||||||
def setDefaultPrincipalRoles(self):
|
def setDefaultPrincipalRoles(self):
|
||||||
prm = self.principalRoleManager
|
prm = self.principalRoleManager
|
||||||
# TODO: only for local roles
|
# TODO: set loops.Person roles for Person
|
||||||
# TODO: set loops.Person roles for Person parents
|
|
||||||
for r, p, s in prm.getPrincipalsAndRoles():
|
for r, p, s in prm.getPrincipalsAndRoles():
|
||||||
setPrincipalRole(prm, r, p, Unset)
|
if r in allRolesExceptOwner:
|
||||||
|
setPrincipalRole(prm, r, p, Unset)
|
||||||
|
|
||||||
def setPrincipalRoles(self, settings):
|
def setPrincipalRoles(self, settings):
|
||||||
prm = self.principalRoleManager
|
prm = self.principalRoleManager
|
||||||
|
|
Loading…
Add table
Reference in a new issue