Esempio n. 1
0
 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'))
Esempio n. 2
0
 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)
Esempio n. 3
0
 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
Esempio n. 4
0
 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
Esempio n. 5
0
 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)
Esempio n. 6
0
 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
Esempio n. 7
0
 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)
Esempio n. 8
0
 def __init__(self, context, request=None):
     if not IWorkspaceContext.providedBy(context):
         raise ValueError
     self.context = context
     self.request = request if request else getRequest()
Esempio n. 9
0
def workspace_for(context):
    if IWorkspaceContext.providedBy(context):
        return context
    return find_parent(context, iface=IWorkspaceContext, start_depth=3)