def test_interfaces(self): """Test any interface bindings configured on content""" ## these are markers hooked up to Products.qi types in ## configure.zcml for uu.qiext: from Products.qi.extranet.types import project, team, subteam from uu.qiext.interfaces import IWorkspaceContext from uu.qiext.interfaces import IProjectContext, ITeamContext assert IWorkspaceContext.providedBy(project.Project('project')) assert IWorkspaceContext.providedBy(team.Team('team')) assert IWorkspaceContext.providedBy(subteam.SubTeam('subteam')) assert IProjectContext.providedBy(project.Project('project')) assert ITeamContext.providedBy(team.Team('team')) assert ITeamContext.providedBy(subteam.SubTeam('subteam'))
def __init__(self, context, parent=None, groupid=u'', title=u'', description=u'', namespace=u'', roles=(), members=None, **kwargs): if not IWorkspaceContext.providedBy(context): raise ValueError('Could not adapt: context not a workspace') schema = interfaces.IWorkspaceGroup if schema.providedBy(parent): self.__parent__ = parent self.context = context self.adapts_project = IProjectContext.providedBy(context) valid_setattr(self, schema['baseid'], _decode(groupid)) valid_setattr(self, schema['title'], _decode(title)) valid_setattr(self, schema['description'], _decode(description)) valid_setattr(self, schema['namespace'], _decode(namespace)) self._keys = None self.portal = getSite() self.site_members = members or interfaces.ISiteMembers(self.portal) groups = Groups(self.portal) groupname = self.pas_group()[0] if groupname not in groups: groups.add(groupname) # edge-case: may cause write-on-read self._group = GroupInfo(groupname, members=self.site_members)
def __init__(self, context, request): if not IWorkspaceContext.providedBy(context): raise ValueError('Context not a workspace') self.context = context self.request = request self.portal = getSite() self._members = ISiteMembers(self.portal) self._roster = IWorkspaceRoster(self.context) self._mtool = getToolByName(self.portal, 'portal_membership') self._secmgr = None
def getAllLocalRolesInContext(self, object): rolemap = {} workspace = None for obj in self._parent_chain(object): for provider in self._getAdapters(obj): iter_roles = provider.getAllRoles() for principal, roles in iter_roles: if workspace: # seen previous workspace, don't inherit some roles roles = filter_roles(roles) rolemap.setdefault(principal, set()).update(roles) if IWorkspaceContext.providedBy(obj): workspace = obj # mark ws as seen before looking at parents return rolemap
def __init__(self, context, request): _WS_KEY = "_qiext_workspace_%s" % context.getId() self.context = context self.request = request self.secmgr = None # too early to get security manager in ctor self.annotations = IAnnotations(request) self.workspace = self.annotations.get(_WS_KEY, _marker) if self.workspace is _marker: if not IContentish.providedBy(context): # site root or plone.schemaeditor.interfaces.ISchemaContext self.annotations[_WS_KEY] = self.workspace = None return if IWorkspaceContext.providedBy(context): self.annotations[_WS_KEY] = self.workspace = self.context else: self.annotations[_WS_KEY] = self.workspace = queryAdapter(self.context, IWorkspaceContext)
def checkLocalRolesAllowed(self, user, object, object_roles): user, principal_ids = self._user_info(user) workspace = None check_roles = set(object_roles) for obj in self._parent_chain(object): for provider in self._getAdapters(obj): for principal_id in principal_ids: roles = list(provider.getRoles(principal_id)) if workspace: # seen previous workspace, don't inherit some roles roles = filter_roles(roles) if check_roles.intersection(roles): if user._check_context(obj): return 1 else: return 0 if IWorkspaceContext.providedBy(obj): workspace = obj # mark ws as seen before looking at parents return None
def getRolesInContext(self, user, object): roles = set() workspace = None user, principal_ids = self._user_info(user) for obj in self._parent_chain(object): if user._check_context(obj): for provider in self._getAdapters(obj): for principal_id in principal_ids: context_roles = list(provider.getRoles(principal_id)) if workspace: # once you have seen a previous workspace, there # are certain roles you DO NOT want to inherit # from a higher-level workspace in the containment # hierarchy. We filter those roles from the list # for all but the first seen workspace walking up # the hierarchy. context_roles = filter_roles(context_roles) roles.update(context_roles) if IWorkspaceContext.providedBy(obj): workspace = obj # mark ws as seen before looking at parents return list(roles)
def __init__(self, context, request=None): if not IWorkspaceContext.providedBy(context): raise ValueError self.context = context self.request = request if request else getRequest()
def workspace_for(context): if IWorkspaceContext.providedBy(context): return context return find_parent(context, iface=IWorkspaceContext, start_depth=3)