Skip to main content

UNKNOWN

Project description

Overview

Products.PluggableAuthService provides a “Dynamic Groups Plugin”. You can add “virtual” groups, and for each of them Membership is established via a predicate, expressed as a TALES expression.

This package aims to provide a similar functionality, but in a different way. Once the “Another Dynamic Groups Plugin” is installed it will lookup named multi-adapters for the user and the request. Each adapter will provide a sequence of groups which the principal is a member of. It’s similar to borg.localrole but for groups.

The provided plugin is also a “groups introspection plugin”. It means the “virtual” groups created are shown in the Plone management UI for groups. Actually, if we don’t do that the @@usergroup-userprefs view breaks.

Installation

The usual: make the package available in the buildout and have its ZCML loaded. Then you can install it as a Plone add-on into a Plone Site.

Usage

Once the add-on is installed you can add “virtual” groups. These will be the groups dynamically assigned to the users by the plugin. This can also be done through the ZMI:

>>> from collective.anotherdynamicgroupsplugin.util import add_virtual_group
>>> add_virtual_group(group_id='group1', title='Group 1')
>>> add_virtual_group(group_id='group2', title='Group 2')
>>> add_virtual_group(group_id='group3', title='Group 3')

Add some users:

>>> from Products.CMFCore.utils import getToolByName
>>> mtool = getToolByName(portal, 'portal_membership')
>>> for u_id in ('user1', 'user2', 'user3'):
...     mtool.addMember(u_id, 'foo', [], [])

Now we create and register the named adapters. The first one just makes everybody a member of “group1”:

>>> from collective.anotherdynamicgroupsplugin.interfaces import IGroupProvider
>>> from zope.component import provideAdapter
>>> from zope.interface import implements
>>> from zope.publisher.interfaces.http import IHTTPRequest
>>> from Products.PluggableAuthService.interfaces.authservice import IBasicUser
>>> class ProvideGroup1ToAll(object):
...     implements(IGroupProvider)
...     def __init__(self, user, request):
...         self.user = user
...         self.request = request
...     def __call__(self):
...         return ['group1']
>>> provideAdapter(
...     ProvideGroup1ToAll,
...     adapts=(IBasicUser, IHTTPRequest),
...     name=ProvideGroup1ToAll.__name__
... )

The second adapter makes the user member of the group with correspondent name:

>>> class ProvideCorrespondentGroup(object):
...     implements(IGroupProvider)
...     def __init__(self, user, request):
...         self.user = user
...         self.request = request
...     def __call__(self):
...         if not self.user.getId().startswith('user'):
...             return []
...         number = self.user.getId()[-1]
...         return ['group' + number]
>>> provideAdapter(
...     ProvideCorrespondentGroup,
...     adapts=(IBasicUser, IHTTPRequest),
...     name=ProvideCorrespondentGroup.__name__
... )

Now let’s check if the groups are correctly assigned to each user:

>>> user1 = mtool.getMemberById('user1')
>>> sorted(user1.getGroups())
['AuthenticatedUsers', 'group1']

>>> user2 = mtool.getMemberById('user2')
>>> sorted(user2.getGroups())
['AuthenticatedUsers', 'group1', 'group2']

>>> user3 = mtool.getMemberById('user3')
>>> sorted(user3.getGroups())
['AuthenticatedUsers', 'group1', 'group3']

Test clean-up:

>>> from zope.component import getGlobalSiteManager
>>> sm = getGlobalSiteManager()
>>> for a in (ProvideGroup1ToAll, ProvideCorrespondentGroup):
...     removed = sm.unregisterAdapter(
...         provided=IGroupProvider,
...         required=(IBasicUser, IHTTPRequest),
...         name=a.__name__
...     )
>>> list(sm.registeredAdapters())
[]

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

collective.anotherdynamicgroupsplugin-0.2.tar.gz (6.3 kB view details)

Uploaded Source

File details

Details for the file collective.anotherdynamicgroupsplugin-0.2.tar.gz.

File metadata

File hashes

Hashes for collective.anotherdynamicgroupsplugin-0.2.tar.gz
Algorithm Hash digest
SHA256 d8f4cfed955314273342ede005ed7019ba17ab377a69691677496548d70b7f98
MD5 16543d382d0a20a1b884c23d703bec57
BLAKE2b-256 6a218e49f5013df81bec09cc67df0eafc28201df31da152dede956c511ffe63e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page