prepare for hiding concepts from parents portlet for certain roles
git-svn-id: svn://svn.cy55.de/Zope3/src/loops/trunk@3833 fd906abe-77d9-0310-91a1-e0d9ade77398
This commit is contained in:
		
							parent
							
								
									6c5430ef70
								
							
						
					
					
						commit
						c2a5a9cca8
					
				
					 2 changed files with 38 additions and 1 deletions
				
			
		|  | @ -48,6 +48,7 @@ from cybertools.browser.action import actions | |||
| from cybertools.composer.interfaces import IInstance | ||||
| from cybertools.composer.schema.grid.interfaces import Grid | ||||
| from cybertools.composer.schema.interfaces import ISchemaFactory | ||||
| from cybertools.meta.interfaces import IOptions | ||||
| from cybertools.typology.interfaces import IType, ITypeManager | ||||
| from cybertools.util.jeep import Jeep | ||||
| from loops.browser.common import EditForm, BaseView, LoopsTerms, concept_macros | ||||
|  | @ -55,6 +56,7 @@ from loops.common import adapted | |||
| from loops.concept import Concept, ConceptTypeSourceList, PredicateSourceList | ||||
| from loops.i18n.browser import I18NView | ||||
| from loops.interfaces import IConcept, IConceptSchema, ITypeConcept, IResource | ||||
| from loops.organize.util import getRolesForPrincipal | ||||
| from loops.schema.base import RelationSet, Relation | ||||
| from loops import util | ||||
| from loops.util import _ | ||||
|  | @ -308,8 +310,18 @@ class ConceptView(BaseView): | |||
|             result[typeName] = list(group) | ||||
|         return result | ||||
| 
 | ||||
|     def isHidden(self, pr): | ||||
|         hideRoles = IOptions(adapted(pr.first.conceptType))('hide_for', None) | ||||
|         if hideRoles is not None: | ||||
|             roles = getRolesForPrincipal(self.request.principal.id, self.context) | ||||
|             for r in roles: | ||||
|                 if r in hideRoles: | ||||
|                     return True | ||||
|         return False | ||||
| 
 | ||||
|     def parents(self): | ||||
|         rels = sorted(self.context.getParentRelations(), | ||||
|         rels = sorted((pr for pr in self.context.getParentRelations() | ||||
|                           if not self.isHidden(pr)), | ||||
|                       key=(lambda x: x.first.title.lower())) | ||||
|         for r in rels: | ||||
|             yield self.childViewFactory(r, self.request) | ||||
|  |  | |||
|  | @ -26,6 +26,9 @@ from zope import interface, component, schema | |||
| from zope.app.authentication.interfaces import IPluggableAuthentication | ||||
| from zope.app.authentication.interfaces import IAuthenticatorPlugin | ||||
| from zope.app.security.interfaces import IAuthentication, PrincipalLookupError | ||||
| from zope.app.security.settings import Allow, Deny, Unset | ||||
| from zope.app.securitypolicy.interfaces import IPrincipalRoleManager | ||||
| from zope.traversing.api import getParents | ||||
| from loops.common import adapted | ||||
| from loops.type import getOptionsDict | ||||
| 
 | ||||
|  | @ -99,6 +102,28 @@ def getPrincipalForUserId(id, context=None): | |||
|         return None | ||||
| 
 | ||||
| 
 | ||||
| def getRolesForPrincipal(id, context): | ||||
|     prinrole = IPrincipalRoleManager(context, None) | ||||
|     if prinrole is None: | ||||
|         return [] | ||||
|     result = [] | ||||
|     denied = [] | ||||
|     for role, setting in prinrole.getRolesForPrincipal(id): | ||||
|         if setting == Allow: | ||||
|             result.append(role) | ||||
|         elif setting == Deny: | ||||
|             denied.append(role) | ||||
|     for obj in getParents(context): | ||||
|         prinrole = IPrincipalRoleManager(obj, None) | ||||
|         if prinrole is not None: | ||||
|             for role, setting in prinrole.getRolesForPrincipal(id): | ||||
|                 if setting == Allow and role not in denied and role not in result: | ||||
|                     result.append(role) | ||||
|                 elif setting == Deny and role not in denied: | ||||
|                     denied.append(role) | ||||
|     return result | ||||
| 
 | ||||
| 
 | ||||
| def getTrackingStorage(obj, name): | ||||
|     records = obj.getLoopsRoot().getRecordManager() | ||||
|     if records is not None: | ||||
|  |  | |||
		Loading…
	
	Add table
		
		Reference in a new issue
	
	 helmutm
						helmutm