set state-based security as part of default security settings
This commit is contained in:
		
							parent
							
								
									0c8cc8a24e
								
							
						
					
					
						commit
						5592ffb734
					
				
					 1 changed files with 28 additions and 0 deletions
				
			
		|  | @ -31,7 +31,10 @@ from zope.cachedescriptors.property import Lazy | ||||||
| from zope.interface import implements, Interface | from zope.interface import implements, Interface | ||||||
| from zope.security.proxy import isinstance | from zope.security.proxy import isinstance | ||||||
| 
 | 
 | ||||||
|  | from cybertools.meta.interfaces import IOptions | ||||||
|  | from cybertools.stateful.interfaces import IStateful | ||||||
| from loops.common import adapted, AdapterBase, baseObject | from loops.common import adapted, AdapterBase, baseObject | ||||||
|  | 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 | ||||||
|  | @ -56,6 +59,17 @@ class BaseSecuritySetter(object): | ||||||
|     def conceptManager(self): |     def conceptManager(self): | ||||||
|         return self.baseObject.getLoopsRoot().getConceptManager() |         return self.baseObject.getLoopsRoot().getConceptManager() | ||||||
| 
 | 
 | ||||||
|  |     @Lazy | ||||||
|  |     def typeOptions(self): | ||||||
|  |         type = self.baseObject.getType() | ||||||
|  |         if type is None: | ||||||
|  |             return DummyOptions() | ||||||
|  |         return IOptions(adapted(type), DummyOptions()) | ||||||
|  | 
 | ||||||
|  |     @Lazy | ||||||
|  |     def globalOptions(self): | ||||||
|  |         return IOptions(self.baseObject.getLoopsRoot()) | ||||||
|  | 
 | ||||||
|     @Lazy |     @Lazy | ||||||
|     def acquiringPredicates(self): |     def acquiringPredicates(self): | ||||||
|         return [self.conceptManager.get(n) for n in acquiringPredicateNames] |         return [self.conceptManager.get(n) for n in acquiringPredicateNames] | ||||||
|  | @ -106,6 +120,14 @@ class LoopsObjectSecuritySetter(BaseSecuritySetter): | ||||||
|         rpm = self.rolePermissionManager |         rpm = self.rolePermissionManager | ||||||
|         for p, r, s in rpm.getRolesAndPermissions(): |         for p, r, s in rpm.getRolesAndPermissions(): | ||||||
|             setRolePermission(rpm, p, r, Unset) |             setRolePermission(rpm, p, r, Unset) | ||||||
|  |         self.setStateSecurity() | ||||||
|  | 
 | ||||||
|  |     def setStateSecurity(self): | ||||||
|  |         statesDefs = (self.globalOptions('organize.stateful.concept', []) + | ||||||
|  |                       (self.typeOptions('organize.stateful') or [])) | ||||||
|  |         for std in statesDefs: | ||||||
|  |             stf = component.getAdapter(self.baseObject, IStateful, name=std) | ||||||
|  |             stf.getStateObject().setSecurity(stf) | ||||||
| 
 | 
 | ||||||
|     def acquireRolePermissions(self): |     def acquireRolePermissions(self): | ||||||
|         settings = {} |         settings = {} | ||||||
|  | @ -186,6 +208,12 @@ class ResourceSecuritySetter(LoopsObjectSecuritySetter): | ||||||
|     def parents(self): |     def parents(self): | ||||||
|         return self.baseObject.getConcepts(self.acquiringPredicates) |         return self.baseObject.getConcepts(self.acquiringPredicates) | ||||||
| 
 | 
 | ||||||
|  |     def setStateSecurity(self): | ||||||
|  |         statesDefs = (self.globalOptions('organize.stateful.resource', [])) | ||||||
|  |         for std in statesDefs: | ||||||
|  |             stf = component.getAdapter(self.target, IStateful, name=std) | ||||||
|  |             stf.getStateObject().setSecurity(self.context) | ||||||
|  | 
 | ||||||
|     def setRolePermissions(self, settings): |     def setRolePermissions(self, settings): | ||||||
|         vSetters = [self] |         vSetters = [self] | ||||||
|         vr = IVersionable(baseObject(self.context)) |         vr = IVersionable(baseObject(self.context)) | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		
		Reference in a new issue