Products.PlonePAS


NameProducts.PlonePAS JSON
Version 8.0.2 PyPI version JSON
download
home_pagehttps://github.com/plone/Products.PlonePAS
SummaryPlonePAS modifies the PluggableAuthService for use by Plone.
upload_time2023-07-13 22:08:39
maintainer
docs_urlNone
authorKapil Thangavelu, Wichert Akkerman
requires_python>=3.8
licenseZPL
keywords zope cmf plone pas authentication
VCS
bugtrack_url
requirements No requirements were recorded.
Travis-CI No Travis.
coveralls test coverage No coveralls.
            Overview
========

This product extends `PluggableAuthService <https://github.com/zopefoundation/Products.PluggableAuthService>`_ (PAS) for use in Plone.

It adds

- group support
- auto group assignment
- support for mutable properties
- cookie based login
- local role support
- password policy support
- enhanced user objects
- enhanced cmf tools (groups, members)
- simple passwordpolicy
- new event for users initial log in

PlonePAS also adds the API of the old GroupUserFolder (GRUF) to PAS.
GRUF was used in Plone 2.5.x and earlier as the default user folder.

Lots of this changes are done with monkey patches to PAS itself.
This is not ideal, but was done in past this way, even if we now would do it better.

PlonePAS does not depend on Plone itself, just on Zope2, PAS and CMF and some low level libraries.

FAQ
---

Why doesn't the title of my group, that I set in the ZMI, show up?
    The title for a group comes from the properties plugin.
    The info in the groups plugin isn't used, except for the name.

    The value of the ``title`` property on the ``portal_groupdata`` or ``portal_memberdata tools`` themselves (as opposed to the group or member data records within them) will not be used as a default for the title of the group or member.
    This is to prevent UI confusion if a title is set without realizing the implications.
    To remove this special case, see ``plugins.property._getDefaultValues``.

Why are my schema changes ignored?
    If PAS caching is enabled (see the ``Cache`` tab) and the cache manager does not have a *cleanup* method (RAMCacheManager has one), then changes to the memberdata schema will not effect users already cached.
    In this case, restart the server or clear the cache (if possible) for the changes to take effect.

    Similarly, changes to the memberdata schema will not propagate to member objects already in use.
    If you have a memberdata object and change the memberdata properties you must re-construct the member by saying ``portal_membership.getMemberById`` again.
    See ``tests.test_properties.test_user_properties`` for example.

Why can't I logout?
    By default, logout from users signed in under HTTP Basic Auth cannot log out.
    If you enable the ``Credentials Reset`` plugin for the HTTP Basic plugin, the logout for cookies will no longer work.
    However, this is not a problem if you're not using cookies.

Authorship
----------

Initial creation: The PAS CIGNEX Sprint Team [ Anders, Bob, Ben,
Chad, Gautham, Joel, Kapil, Michel, Micheal ]

Post-sprint work: J Cameron Cooper, Leo, Sidnei, Mark at `Enfold
Systems <http://enfoldsystems.com>`_

Basic setAuthCookie support (to mimic CookieCrumbler):
Rocky Burt at `ServerZen Software <http://www.serverzen.com>`_

Synced login process with Plone:
Dorneles Tremea at `PloneSolutions <http://plonesolutions.com>`_

Bugfixes, various development and merging with Plone:
Wichert Akkerman at Simplon

Bugfixes, improvements to membership and property lookups:
Eric Steele and Erik Rose

Review, cleanup, modernize code, addressing Plone 5:
Jens Klein, BlueDynamics Alliance - `Klein & Partner KG <http://kleinundpartner.at>`_

Source Code
-----------

Contributors please read the document `Process for Plone core's development <https://docs.plone.org/develop/coredev/docs/index.html>`_

Sources are at the `Plone code repository hosted at Github <https://github.com/plone/Products.PlonePAS>`_.

Changelog
=========

.. You should *NOT* be adding new change log entries to this file.
   You should create a file in the news directory instead.
   For helpful instructions, please see:
   https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst

.. towncrier release notes start

8.0.2 (2023-07-13)
------------------

Internal:


- Update configuration files.
  [plone devs] (cfffba8c)


8.0.1 (2023-05-25)
------------------

Bug fixes:


- Translate error message, simplify error handling. [tschorr] (#75)


8.0.0 (2023-04-06)
------------------

Breaking changes:


- Remove `ldapmp` module. It is not being tested in Plone 6.
  See https://github.com/plone/Products.PlonePAS/pull/71#pullrequestreview-1351349950
  [gforcada] (#1)


Internal:


- Update configuration files.
  [plone devs] (80cf330f)


7.0.0 (2022-12-02)
------------------

Bug fixes:


- Final release for Plone 6.0.0 (#600)


7.0.0b3 (2022-10-11)
--------------------

Bug fixes:


- Fix admin password used in tests. [davisagli] (#70)


7.0.0b2 (2022-10-03)
--------------------

New features:


- Increase the minimum password length to 8 characters. [davisagli] (#69)


7.0.0b1 (2022-08-31)
--------------------

Bug fixes:


- Apply `isort`, `black`, `pyupgrade` and manual removal of six leftovers.
  Fix `PIL` deprecation warning, assume `PIL` is always there.
  Make `mypy` happy again.
  [jensens] (#68)


7.0.0a3 (2022-03-09)
--------------------

New features:


- Add separate `GenericSetup` profile to switch the Zope root `/acl_users` to use a simple
  cookie login form.  Useful when Zope root login and logout need to synchronize
  authentication state between multiple plugins, which is not possible with HTTP `Basic
  ...` authentication. [rpatterson] (#65) (zope-root-cookie)


7.0.0a2 (2021-12-29)
--------------------

Bug fixes:


- Fixed deprecation warning for ``AccessControl.AuthEncoding``.
  [maurits] (#64)
- Fix broken Zope root `/acl_users` cookie plugin on `PlonePAS` install.
  [rpatterson] (#65)


7.0.0a1 (2021-07-28)
--------------------

Breaking changes:


- Drop support for Plone 5.2 and Python 2.7.
  [maurits] (#61)


Bug fixes:


- Support for Pillow 8. [jensens] (#61)
- Fixed tests for cookie auth to also work with `zope.interface` 5.3.0.
  This uses simpler representations for interfaces.
  Tests now pass with earlier and later versions.
  [maurits] (#237)


6.0.7 (2021-02-16)
------------------

Bug fixes:


- Fixes deprection message: `AccessControl.User has moved to AccessControl.users`.
  [jensens] (#59)


6.0.6 (2020-04-23)
------------------

Bug fixes:


- Minor packaging updates. (#1)


6.0.5 (2019-12-10)
------------------

Bug fixes:


- - Notify CredentialsUpdated event when password is changed
    [ezvirtual] (#33)


6.0.4 (2019-12-02)
------------------

Bug fixes:


- - Notify PropertiesUpdated event when member properties are changed
    [ezvirtual]

  - Add simple test for PropertiesUpdated event
    [ezvirtual] (#27)


6.0.3 (2019-11-25)
------------------

Bug fixes:


- Log exception from PAS logout() instead of swallowing them
  [ajung] (#50)
- Fix deprecated imports.
  Fix buildout infrastructure for Plone 5.2.
  [thet] (#51)
- Create the MemberData object from an adapter instead of directly instantiating it, as intended in Products.CMFCore.MemberDataTool.
  This allows for better extensibility.
  [thet] (#52)


6.0.2 (2019-04-29)
------------------

Bug fixes:


- Avoid ResourceWarning messages.
  [gforcada] (#47)


6.0.1 (2018-12-11)
------------------

Bug fixes:


- Change `im_self` to `__self__` [vangheem] (#43)


6.0.0 (2018-11-05)
------------------

Breaking changes:

- Adapt to changes of MemberData in CMFCore.
  Fixes https://github.com/plone/Products.PlonePAS/issues/24
  [pbauer]

New features:

- Make it work in Python 3:
  Make imports work.
  Fix startup.
  Fix setting the auth-cookie.
  Fix assignment of MemberData-functions during startup.
  User properties are text.
  Fix scaling user profile.
  Migrate all tests away from PloneTestCasei.
  Fix other tests.
  [pbauer]

Bug fixes:

- InitializeClass was moved to AccessControl.class_init
  [jensens]

- setDefaultRoles is deprecated.
  addPermission from AccessControl.Permission is used.
  [jensens]

- Removed ``Extensions/Install.py`` which had only backwards compatibility imports.
  [maurits]

- Report home_page as empty when it is suspicious.
  It may for example contain javascript.
  Part of PloneHotfix20171128.
  [maurits]

- Remove setAuthCookie script. #1801
  This used to be a hook to allow overriding the credentials update. The
  default override has been used as the new implementation.
  [tlotze]


5.0.14 (2017-05-09)
-------------------

Bug fixes:

- Remove WarningInterceptor (CMFCore) - it is gone in newer versions.
  [jensens]


5.0.13 (2016-11-09)
-------------------

Bug fixes:

- In getMemberInfo, if a property is not present it now returns an
  empty string, rather than raising an exception. This fixes login for
  sites that have location removed.
  [MatthewWilkes]


5.0.12 (2016-09-09)
-------------------

Bug fixes:

- Depend on plone.protect 2.0.3 or higher.
  Fixes https://github.com/plone/Products.PlonePAS/issues/21
  [maurits]


5.0.11 (2016-05-20)
-------------------

Bug fixes:

- Use the _marker from CMFCore for MemberDataTool.getProperty,
  this makes sure that we never return the _marker from PlonePAS
  but an error.
  [pcdummy]

- Don't raise an ValueError if a property doesn't exists for a ZOPE
  user.
  [pcdummy]


5.0.10 (2016-05-02)
-------------------

Fixes:

- Fix UnicodeDecodeError in searchForMembers by using safe_unicode.
  [pbauer]


5.0.9 (2016-03-03)
------------------

New:

- Notify new IGroupDeletedEvent when deleting a group.
  [DieKatze]


5.0.8 (2016-02-24)
------------------

Fixes:

- Let ``cleanId`` return a string when getting a unicode.  [maurits]

- Fixed AttributeError with Python 2.6 when reading setup.py.  [maurits]


5.0.7 (2016-01-08)
------------------

Fixes:

- Fixed typo in documentation.  [gforcada]


5.0.6 (2015-12-16)
------------------

Fixes:

- bring back Python 2.6 support (in 2.6 depend on orderedict) and import
  conditional with fallback.
  [gforcada, jensens]


5.0.5 (2015-12-08)
------------------

Fixes:

- Applied Hotfix 2015-12-08.


5.0.4 (2015-09-20)
------------------

- Removed tests for non-utf-8 encodings.
  [esteele]


5.0.3 (2015-07-18)
------------------

- Allow to set a property to None.
  [ebrehault]


5.0.2 (2015-05-04)
------------------

- Prevent CRSF protecting errors when logging out because of
  Zope2 write on read issues
  [vangheem]

- Reduce logging level for while patching from info down to debug.
  [jensens]


5.0.1 (2015-03-21)
------------------

- Add a integrated test setup with codeanalysis and travis. For this moved
  ``Products`` folder to a ``src`` folder in order to follow the package
  structure expected by ``buildout.plonetest``'s ``qa.cfg``.
  [jensens]

- Make patching of LDAPMultiPlugin explicit. Code using those must call
  ``Products.PlonePAS.ldapmp.patch_ldapmp`` with no parameters in order
  to activate the patches.
  [jensens]

- Removed (optional) Archetypes Storage (used in past with CMFMember, which
  itself was long time ago superseded by Membrane). Probably dead code. If
  there's someone out there needing it in Plone 5 please copy the code from
  git/Plone4 in your addon/project.
  [jensens]

- Moved ``Extensions/Install.py`` functions to setuphandlers, kept BBB import
  for ``activatePluginInterfaces`` since this is imported by ``borg.localrole``.
  [jensens]

- Expect Python 2.7 with ``collections.OrderedDict``.
  [jensens]

- Remove nasty dependency to Products.CMFDefault.
  [jensens]

- Cleanup patches, allow introspection by using wrap_method, add roles using wrap_method,
  add deprecation and merge ``gruf_support.py`` in ``pas,py`` to have a better overview
  what is patched.
  [jensens]

- Cleanup: PEP8 et all, zca decorators, rough code review
  [jensens]

- In searchForMembers, ensure that request parameters are properly
  decoded to unicode
  [do3cc]


5.0 (2014-04-05)
----------------

- Do not write member data on read
  [vangheem]

- Allow ``properties`` to be passed to ``PloneUser.setProperties``.
  This was previously ignored as ``setProperties`` solely utilised
  keyword arguments.
  [davidjb]


4.1.2 (2014-01-27)
------------------

- Don't try to migrate the root user folder if the portal has no parent.
  [davisagli]

- Use batteries included odict implementation in favour of homegrown one.
  [tomgross]

- Use correct methods for getting users from id or names
  [tomgross]

- Ported tests to plone.app.testing
  [tomgross]

4.1.1 (2013-03-05)
------------------

- Fix a bug in setSecurityProfile where the login name was passed
  instead of the user id.
  [davisagli]

- Added empty updateUser and updateEveryLoginName methods in
  ZODBMutablePropertyProvider to fulfill the new standards of the
  IUserEnumerationPlugin.
  [maurits]


4.1 (2013-01-01)
----------------

- Fix assignRoleToPrincipal to work with new Products.PluggableAuthService 1.10.0.
  [maurits]

- Fix saving, getting and deleting the user portrait for non-standard
  user ids like 'bob-jones' or 'bob-jones+test@example.org'.
  [maurits]

- Fix the test for the current password if the user id differs from
  the login name.
  [maurits]


4.1a2 (2012-08-29)
------------------

- Bug fix: User with e-mail login got 'Insufficient Privileges' when
  trying to delete own portrait. Fixes http://dev.plone.org/ticket/12819.
  [patch by kagesenshi, applied by kleist]

- MembershipTool.searchForMembers() now preserves sort order.
  Fixes http://dev.plone.org/ticket/11716.
  [patch by neaj, applied by kleist]

- Changed deprecated getSiteEncoding to hardcoded `utf-8`
  [tom_gross]


4.1a1 (2012-06-29)
------------------

- Allow members with usernames that contain special characters
  (such as @ when use email to login), set their own member portrait
  [erral]

- PEP8 Cleanup
  [pbdiode]

- Add a default password validation policy as PAS plugin,
  see http://dev.plone.org/ticket/10959

- Extensions/Install.py: Don't use list as default argument value
  to activatePluginInterfaces()
  [patch by rossp, applied by kleist]


4.0.13 (2012-05-07)
-------------------

- Require ListPortalMembers permission for searchForMembers
  so anonymous users can not get a list of site users.
  [vangheem]


4.0.12 (2012-04-09)
-------------------

- Make sure that during registration you can change your member
  portrait (if this has been enabled the member registration config).
  Refs http://dev.plone.org/ticket/5432
  [maurits]


4.0.11 (2012-02-08)
-------------------

- Do some more checks when changing or deleting a member portrait.
  Fixes http://dev.plone.org/ticket/5432
  [maurits]

- Pass request along to getGroupsForPrincipal for caching purposes.
  [esteele]


4.0.10 (2012-01-04)
-------------------

- Fixed typo in method name hasOpenIDExtractor, keeping the old name
  (hasOpenIDdExtractor) around for backwards compatibility.
  Fixes http://dev.plone.org/ticket/11040
  [maurits]


4.0.9 (2011-11-24)
------------------

- Avoid a failure when we try to add a role to principal that is managed by
  an other plugin.
  [thomasdesvenain]

- Cleaned up and reduced dependencies. New extra ``atstorage`` for the rare case
  someone uses PlonePAS w/o Plone but with Archetypes (if this is this
  possible). [jensens]

4.0.8 - 2011-06-30
------------------

- Fire IPrincipalDeleted when a user is deleted.
  [stefan, ggozad]

4.0.7 - 2011-05-12
------------------

- Copy in CleanupTemp from CMFCore as it has been removed from CMFCore 2.3.
  [elro]

- Move import step to be registered in ZCML rather than XML.
  Remove the non-existent dependency on `plonepas-content`.
  [kiorky]

4.0.6 - 2011-02-25
------------------

- Fix missing and broken security declarations.
  [davisagli]

4.0.5 - 2011-02-14
------------------

- Avoid breaking on startup if PIL isn't present.
  [davisagli]

- Use 'defaultUser.png' as the default user portrait, since the .gif version
  has been deprecated for a long time now. See
  http://dev.plone.org/plone/changeset/36350
  [mj]

4.0.4 - 2011-01-03
------------------

- Remove plone.openid dependency in setup.py, import errors are already caught
  in PASInfoView.
  [elro]

- The code to search by id in mutable_properties.enumerateUsers didn't work at
  all, an exception was always raised and it was actually a good thing.
  We tried to implement it in 3.10 and we had strange listing in Plone UI. Then
  we reverted it in the next version so the behavior was backward compatible
  with previous versions.
  If we allow search by id, we can potentially break other part of the code. For
  example acl_users/portal_role_manager/manage_roles will break because
  Products.PluggableAuthService.plugins.ZODBRoleManager.listAssignedPrincipals
  raises MultiplePrincipalError, and maybe it will break somewhere else.
  Versions 4.0.4 and 3.13 use now the same algorithm.
  References http://dev.plone.org/plone/ticket/9361
  [vincenfretin]

- When calling editGroup method, avoid error
  while trying to remove dynamic 'AuthenticatedUsers' group.
  [thomasdesvenain]

- In Plone 4.1+, create a Site Administrators group with the new Site
  Administrator role.
  [davisagli]

- Fix critical error on groupprefs page
  when some groups have a non-ascii character in their title.
  Sort groups on their title normalized.
  This fixes http://dev.plone.org/plone/ticket/11301
  [thomasdesvenain]

- Fix interface error: doChangeUser takes a user id as parameter,
  not a login name.
  [wichert]

4.0.3 - 2010-09-09
------------------

- Check we have a REQUEST attribute before accessing it in
  getRolesForPrincipal.
  [vincentfretin]

- Use safe_unicode to correctly find users with
  non-ascii properties, regardless of the sys.defaultencoding.
  This fixes http://dev.plone.org/plone/ticket/10898
  [mr_savage]

4.0.2 - 2010-08-08
------------------

- Made last_login_time logic compatible with DateTime 2.12.5.
  [hannosch]

4.0.1 - 2010-07-31
------------------

- Clean up some unused imports and variable assignments.
  [esteele]

- Stop looking to GRUF to check if group properties can be edited.
  [esteele]

4.0 - 2010-07-18
----------------

- Avoid a deprecation warning for the credentialsChanged method.
  [hannosch]

- Fixed problems with missing user cache invalidation. This closes
  http://dev.plone.org/plone/ticket/10715.
  [fafhrd, hannosch]

- Make VirtualGroup inherit from PropertiedUser so it gets wrapped correctly.
  Have getGroupsForPrincipal not return the AutoGroup as a member of itself.
  Closes http://dev.plone.org/plone/ticket/10568.
  [cah190]

- PluggableAuthService expects a list of group ids from getGroups, don't pass a
  list of wrapped groups instead.
  [cah190, esteele]

- Added a custom `IMembershipTool` interface to PlonePAS extending the base one
  from CMFCore. It adds the `getMemberInfo` method to the mix. This closes
  http://dev.plone.org/plone/ticket/10240.
  [hannosch]

4.0b9 - 2010-06-03
------------------

- Fixed a test to no longer use removed Large Plone Folder type.
  [davisagli]

4.0b8 - 2010-05-01
------------------

- Removed special unauthorized view workaround, after the underlying issue
  has been fixed in Zope2.
  [davisagli, hannosch]

4.0b7 - 2010-04-07
------------------

- Added manage_setMembersFolderById method for ZMI.
  Fixes http://dev.plone.org/plone/ticket/10400
  [daftdog]

4.0b6 - 2010-03-05
------------------

- Revert incorrect PIL import change.
  [hannosch]

4.0b5 - 2010-03-03
------------------

- Install recursive_groups in new sites by default. Make it the last
  IGroupsPlugin installed.
  [esteele]

- Remove caching of utils.py's getGroupsForPrincipal method as it was nastily
  overzealous.
  [esteele, cah190]

- Use sets instead of util.py's 'unique' method.
  [esteele]

4.0b4 - 2010-02-18
------------------

- Properly import from PIL 1.1.7
  [tom_gross]

- Cache getGroupsForPrincipal per principal id per request (when available).
  [esteele]

4.0b3 - 2010-01-31
------------------

- Role plugin's tests no longer subclass (and run all of) ZODBRoleManagerTests
  as they cannot properly handle the plugin's expectation of finding a
  PluginRegistry with IGroupsPlugin
  [erikrose, esteele]

- Revert changes made to ZODBMutablePropertyProvider's enumerateUsers method
  which prevented lookup of users by id. Some refactoring.
  Refs http://dev.plone.org/plone/ticket/9361
  [erikrose, esteele]

- GroupAwareRoleManager now properly computes the roles of deeply-nested
  principals.
  [erikrose, esteele]

- Factor up getGroupsForPrincipal call.
  [erikrose, esteele]

- AutoGroup now implements IPropertiesPlugin to return group title and description.
  [erikrose, esteele]

- GroupsTool's getGroupsForPrincipal and getGroupMembers now return a list
  made up of groups/members from all responding plugins instead of just the
  first responder.
  [erikrose, esteele]

- Remove GroupData's _gruf_getProperty method, move remaining functionality
  into getProperty. getProperty now searches for properties in the following
  places: property sheets directly on the group object, PAS
  IPropertyProviders, portal_groupdata properties, and attributes on its
  GroupData entry. It returns the first piece of data found.
  Closes http://dev.plone.org/plone/ticket/9828
  [erikrose, esteele]

- Added __ignore_direct_roles__ request flag to getRolesForPrincipal() to
  permit retrieval of only group-provided (inherited) roles.
  [cah190]

- getGroupsForPrincipal is a method of PAS' IGroupsPlugin, adjust the groups
  tool's plugin lookup accordingly.
  [esteele]

- Rework the group detection of the ZODBMutablePropertyProvider so that
  enumerateUsers only returns users.
  [esteele]

- Add, but don't activate, a recursive groups plugin on installation.
  [esteele]

- Set proper titles for default groups.
  [esteele]

- Avoid the use of the classImplements helper from PAS. It dealt with the now
  gone Zope2 Interface variants and is no longer needed.
  [hannosch]

- Fix a misnamed kwarg in autogroup plugin.
  [cah190]

- Allow the groups tool's searchForGroups to handle an empty search string as
  'find all'.
  [esteele, cah190]

- Allow PASSearchView's searchGroups method to accept a sorting option.
  [esteele]

- Apply deiter's patch from http://dev.plone.org/plone/ticket/9460 to prevent
  GroupManager's 'getGroupById' from returning groups managed by other group
  managers.
  [esteele]

- GroupsTool.editGroup() now stores title and description in PAS
  propertysheets in addition to Plone-specific tools. This helps us not pave
  over group titles with IDs.
  [erikrose]

- Query the correct keyword variable for the group's description.
  [esteele]

- Fix an incorrect setdefault syntax.
  Closes http://dev.plone.org/plone/ticket/7345
  [esteele]

4.0b2 - 2010-01-02
------------------

- Don't specify PIL as a direct dependencies. It is not installed as an egg on
  all platforms.
  [hannosch]

4.0b1 - 2009-12-27
------------------

- Fixed package dependencies declaration.
  [hannosch]

4.0a2 - 2009-12-16
------------------

- Added backwards compatibility alias for PloneTool to support upgrades from
  Plone 2.5 to work.
  [hannosch]

- Added 'has_email' to the info returned by getMemberInfo.
  Refs http://dev.plone.org/plone/ticket/8707
  [maurits]

4.0a1 - 2009-11-14
------------------

- Simplified ``pas_member`` view.  Also return info when no member
  with the requested id exists, so this can be safely used also to get
  "member info" for deleted members.
  [maurits]

- Added new ``pas_member`` view, which provides easy access to the membership
  tools getMemberInfo method but caches the result on the request.
  [hannosch]

- Changed the default value of `memberareaCreationFlag` for the membership
  tool to False, as it was done during Plone site creation so far.
  [hannosch]

- Removed patch on ZODBUserManager.enumerateUsers which was introduced
  historical because of a former missing release of PluggableAuthService 1.5.
  This now superfluous patch also reduced the functionality of the
  patched method and introduced different behavior compared to i.e in
  a similar method on LDAPMultiPlugins. For details on the former
  patch see:
  http://dev.plone.org/collective/changeset/41512/PlonePAS/trunk/pas.py
  [jensens]

- Moved a couple DTML files here from CMFPlone that got left out of the earlier
  refactoring.
  [davisagli]

- Added a view of the Unauthorized exception which re-raises that exception
  in order to make sure that it triggers PAS' challenge plugin rather than
  rendering the standard_error_message.
  [davisagli]

- Removed deprecation warnings for various methods. These never happened.
  [hannosch]

- Removed half-done ZCacheable caching for users and groups.
  [hannosch]

- Removed the CMFDefault dependency of the membership tool. We only need the
  CMFCore functionality.
  [hannosch]

- PlonePAS.gruf_support.authenticate method was not breaking out of
  the loop upon successful authenticateCredentials.
  [runyaga]

- Changed objectIds and objectValues calls to use the IContainer API.
  [hannosch]

- Removed parts of the outdated Extensions.Install code.
  [hannosch]

- Removed a dependency on CMFPlone's `_createObjectByType` method.
  [hannosch]

- Removed magical `homePageText` lookup for initial memberarea content. You
  can use the `notifyMemberAreaCreated` hook for any kind of custom behavior.
  [hannosch]

- Moved the `scale_image` function from CMFPlone.utils into our own utils
  module, as we are the only user of it. Also made the tests independent of
  any CMFPlone code.
  [hannosch]

- Cleaned up package metadata.
  [hannosch]

- Declare test dependencies in an extra and fixed deprecation warnings
  for use of Globals.
  [hannosch]

- Switched the installation progress reporting to the logging framework.
  [hannosch]

- Cleaned up annoying license headers in all files. We have a central place
  to state the license.
  [hannosch]

- Started cleaning up deprecated methods and comments.
  [hannosch]

- Removed support for group workspaces. This part from GRUF hasn't been
  supported for many releases anymore.
  [hannosch]

- Merged all code for the groups tool from GRUF into this package, we are
  officially GRUF-dependency-free :)
  [hannosch]

- Merged all code for the group data tool from GRUF into this package.
  [hannosch]

- Removed the GRUFBridge plugin. PAS inside GRUF isn't supported anymore.
  [hannosch]

- Merged tests moved from CMFPlone into the same modules as the existing
  tests and normalized file names.
  [hannosch]

- Modernized tests and introduce a proper base testcase and layer.
  [hannosch]

- Removed cookie auth tests, these don't work anymore with plone.session.
  [hannosch]

- Moved over all tests for the four tools from CMFPlone.
  [hannosch]

- Removed the user folder migration code and cleaned up tests.
  [hannosch]

- Moved all code from the four tools from CMFPlone into this package.
  [hannosch]

- Removed 'listed' member property support from one of the many search
  functions following Plone.
  [hannosch]

- Copied setLoginFormInCookieAuth from CMFPlone migrations.
  [hannosch]

- Purged old Zope 2 Interface interfaces for Zope 2.12 compatibility.
  (only a test in this case)
  [elro]


3.12 - 2009-10-16
-----------------

- Fixed the performance fix again. enumerateUsers from mutable_properties
  plugin should return all the users if kw is empty. And it returns empty
  tuple if login or id parameter is used.
  [vincentfretin]


3.11 - 2009-10-05
-----------------

- Revert performance fix introduced in 3.10 for the mutable properties plugin.
  enumerateUsers shouldn't return results if id or login is not None like in
  3.9 (data dict doesn't contain id or login key, so testMemberData returns
  always False). The search should be performed only if kw parameter is not
  empty. This is the new optimization fix.
  [vincentfretin]


3.10 - 2009-09-06
-----------------

- Performance fix for searching in the mutable properties plugin:
  when only searching on user id do not walk over all properties,
  but only test if the user id is known. This fixes
  http://dev.plone.org/plone/ticket/9361
  [toutpt]

- Nested groups are now visible in prefs_group_members. This closes
  http://dev.plone.org/plone/ticket/8557
  [vincentfretin]

- Add sort and merge PASSearchView's interface to prevent code duplication.
  [csenger]


3.9 - 2009-04-21
----------------

- Fix the cookie plugin's login handler to not trust the username
  from the request. Instead we use the login name of the currently
  authenticated user. This fixes CVE-2009-0662 (see
  http://plone.org/products/plone/security/advisories/cve-2009-0662
  for more information).
  [wichert]


3.8 - 2009-02-13
----------------

- Update the role manager's assignRoleToPrincipal method to lazily
  update the cached list of portal roles. This fixes problems with
  adding users with GenericSetup-created roles.
  [wichert]

- Fixed our OrderedDict to be unpickable with pickle protocol 2. On
  unpickling a __init__ method is not called and an optimization in
  protocol 2 would call __setitem__ without the _list to be initialized.
  Even using a __getstate__ / __setstate__ combination wouldn't work
  around that. This change was found in using membrane and
  MemcachedManager.
  [hannosch, tesdal]


3.7 - 2008-09-28
----------------

- Removed deprecation zcml statements for PluggableAuthService components:
  these are now in PluggableAuthService itself.
  [wichert]

- Adjusted deprecation warnings to point to Plone 4.0 instead of Plone 3.5
  since we changed the version numbering again.
  [hannosch]


3.6 - 2008-06-25
----------------

- Modify PloneGroup.getMemberIds to use all IGroupIntrospection plugins
  to get the group members. This makes it possible to list members in
  an LDAP group.
  [wichert]


3.5 - 2008-06-25
----------------

- Make PASSearchView.merge actually merge search results. Its previous
  behaviour was quite nasty: it preferred search results from the
  enumeration plugin with the lowest priority!
  [wichert]


3.4 - 2008-03-26
----------------

- Added BBB code for changed setLoginFormInCookieAuth upgrade method.
  [hannosch]

- Ignore but log users without passwords during migration from pre-PAS, as
  these cannot be added to any standard user source.
  [hannosch]

- Fix listRoleInfo on the role plugin to also lazily update the list
  of portal roles.
  [wichert]

3.3 - 2007-03-07
----------------

- Added metadata.xml file to the profile.
  [hannosch]

- Move global role lookup out of the local role plugin. Part of the
  PLIP 127 merge for Plone 3.1.
  [alecm]


3.2 - 2008-02-15
----------------

- Fix schema handling for ZODBMutablePropertyProvider initialization.
  [maurits]

- Remove some exception swallowing from the installation logic so errors
  are not hidden.
  [hannosch]

- Correct handling an empty roles list when modifying groups.
  This fixes http://dev.plone.org/plone/ticket/6994
  [rsantos]


3.1 - 2007-10-08
----------------

- Improve handing of sorting for searches.
  [csenger]

- Updating the roles for a group did not invalidate the _findGroup cache.
  [wichert]

- Fixed some tool icons to point to existing icons.
  [hannosch]


3.0 - 2007-08-16
----------------

- Fix check for authenticateCredentials return value
  [rossp]


3.0rc2 - 2007-07-27
-------------------

- Fake a getPhysicalPath on our search view so ZCacheing works properly
  everywhere.
  [wichert]

- Add event classes for logged-in and logged-out events.
  [wichert]


3.0rc1 - 2007-07-08
-------------------

- Correct logic in MemberData capability methods: any plugin is
  allowed to (re)set a password, delete the user or add roles.
  [wichert]

- Use the proper API to get the containing PAS in the group plugin
  [wichert]

- Fix setting user properties on the user object.
  [wichert]


3.0b7 - 2007-05-05
------------------

- Removed the five:registerPackage statement again. It causes problems in a
  ZEO environment.
  [hannosch]

- Removed our version of the Plone tool from ToolInit. It won't get an icon
  anymore and you cannot add it, but existing instances still work. We
  migrate all instances back to the regular tool anyways.
  [hannosch]


3.0b6 - 2007-05-05
------------------

- Fixed two migration related test failures.
  [hannosch]

- Spring cleaning, removed some cruft, pyflaked and corrected some more
  undefined names.
  [hannosch]

- New package layout, following standard Python package conventions.
  [hannosch]

- Fixed tool names in ToolInit, so the permission has a proper name. This
  closes http://dev.plone.org/plone/ticket/6525.
  [hannosch]


3.0-beta5 - 2007-05-02
----------------------

- Modify the roles plugin to lazily update its roles list from the portal.
  [wichert]

- Filter duplicate search results.
  [laz, wichert]

- Add a sort_by option to the search methods to allow sorting of results
  by a property.
  [laz, wichert]

- Modify login method for the cookie plugin to perform the credential
  update in the PAS of the user instead of the PAS of the plugin. This
  helps in making sure that users will only authenticate against their
  own user folder, so we get all their roles, properties, etc. correctly.
  [wichert]

- Update installation logic to use plone.session for cookies
  [wichert]

- Add pas_info and pas_search browser views.
  [wichert]

- Deprecate the PlonePAS PloneTool; its changes have been merged in the
  standard Plone version.
  [wichert]

- Use getUtility to get the portal object.
  [wichert]

- Deprecate user and group searching through CMF member and group tools
  in favour of PAS enumeration.
  [wichert]

- Refactor user searching in the membership tool to use standard PAS
  searches.
  [wichert]

- Add user enumeration capabilities to the mutable properties plugin.
  [wichert]

- Add a new automatic group plugin which puts all users in a virtual
  group. This is useful for permissions handling: since it is not
  possible to add roles to users with the Authenticated role a
  virtual group can be used instead.
  [wichert]

- Added support to import PloneUserFactory and added stub
  for ZODBMutableProperties. Attention: Latter needs a real
  export and import! At the moment it do not export the
  propertysheets. This is a TODO. At least with this two
  additions PlonePAS import runs. Additional I needed to
  hack PluginRegistry and and PluggableAuthService slightly.
  [jensens]

- Added HISTORY.txt and updated version information.
  [hannosch]


2.4 - 2007-04-15
----------------

- Optomise the local roles plugin for the common case where
  local_roles is empty
  [dreamcatcher]

- the plone user was assuming a one to one mapping between property plugin
  and user property sheet, and stripping away additional ones as part of
  the retrieval of ordered sheets, instead, it now stores all
  propertysheets in an ordered dictionary, so this assumption is not needed
  [k_vertigo]

- More postonly security changes
  [alecm, ramon]


2.3 - 2007-05-30
----------------

- Use a local postonly decorator so PlonePAS can be used with Plone
  2.5, 2.5.1 and 2.5.2.
  [wichert]

- Protect the tools with postonly security modifiers.
  [mj]

- Update GRUF compatibility functions to use the same security checks
  as GRUF itself uses.
  [mj]

- Fix migration to handle properties of selection or multiple selection
  types.
  [reinout]

- Correct creation of groups which default group managers.
  [dreamcatcher]

- Fix migration from GRUF sites: also include the member properties in the
  migration.
  [tesdal]

- Correct the test for creation of groups with the same id as users: search
  for the exact id, not substrings.
  [tesdal]

- Fix bad form action which made it impossible to add a plone user factory
  plugin through the ZMI. Backported from trunk.
  [wichert]

            

Raw data

            {
    "_id": null,
    "home_page": "https://github.com/plone/Products.PlonePAS",
    "name": "Products.PlonePAS",
    "maintainer": "",
    "docs_url": null,
    "requires_python": ">=3.8",
    "maintainer_email": "",
    "keywords": "Zope CMF Plone PAS authentication",
    "author": "Kapil Thangavelu, Wichert Akkerman",
    "author_email": "plone-developers@lists.sourceforge.net",
    "download_url": "https://files.pythonhosted.org/packages/3a/54/5a68fd4559e5a0b9b751e200299b7294c9496be2479a2f9e282f446024cc/Products.PlonePAS-8.0.2.tar.gz",
    "platform": null,
    "description": "Overview\n========\n\nThis product extends `PluggableAuthService <https://github.com/zopefoundation/Products.PluggableAuthService>`_ (PAS) for use in Plone.\n\nIt adds\n\n- group support\n- auto group assignment\n- support for mutable properties\n- cookie based login\n- local role support\n- password policy support\n- enhanced user objects\n- enhanced cmf tools (groups, members)\n- simple passwordpolicy\n- new event for users initial log in\n\nPlonePAS also adds the API of the old GroupUserFolder (GRUF) to PAS.\nGRUF was used in Plone 2.5.x and earlier as the default user folder.\n\nLots of this changes are done with monkey patches to PAS itself.\nThis is not ideal, but was done in past this way, even if we now would do it better.\n\nPlonePAS does not depend on Plone itself, just on Zope2, PAS and CMF and some low level libraries.\n\nFAQ\n---\n\nWhy doesn't the title of my group, that I set in the ZMI, show up?\n    The title for a group comes from the properties plugin.\n    The info in the groups plugin isn't used, except for the name.\n\n    The value of the ``title`` property on the ``portal_groupdata`` or ``portal_memberdata tools`` themselves (as opposed to the group or member data records within them) will not be used as a default for the title of the group or member.\n    This is to prevent UI confusion if a title is set without realizing the implications.\n    To remove this special case, see ``plugins.property._getDefaultValues``.\n\nWhy are my schema changes ignored?\n    If PAS caching is enabled (see the ``Cache`` tab) and the cache manager does not have a *cleanup* method (RAMCacheManager has one), then changes to the memberdata schema will not effect users already cached.\n    In this case, restart the server or clear the cache (if possible) for the changes to take effect.\n\n    Similarly, changes to the memberdata schema will not propagate to member objects already in use.\n    If you have a memberdata object and change the memberdata properties you must re-construct the member by saying ``portal_membership.getMemberById`` again.\n    See ``tests.test_properties.test_user_properties`` for example.\n\nWhy can't I logout?\n    By default, logout from users signed in under HTTP Basic Auth cannot log out.\n    If you enable the ``Credentials Reset`` plugin for the HTTP Basic plugin, the logout for cookies will no longer work.\n    However, this is not a problem if you're not using cookies.\n\nAuthorship\n----------\n\nInitial creation: The PAS CIGNEX Sprint Team [ Anders, Bob, Ben,\nChad, Gautham, Joel, Kapil, Michel, Micheal ]\n\nPost-sprint work: J Cameron Cooper, Leo, Sidnei, Mark at `Enfold\nSystems <http://enfoldsystems.com>`_\n\nBasic setAuthCookie support (to mimic CookieCrumbler):\nRocky Burt at `ServerZen Software <http://www.serverzen.com>`_\n\nSynced login process with Plone:\nDorneles Tremea at `PloneSolutions <http://plonesolutions.com>`_\n\nBugfixes, various development and merging with Plone:\nWichert Akkerman at Simplon\n\nBugfixes, improvements to membership and property lookups:\nEric Steele and Erik Rose\n\nReview, cleanup, modernize code, addressing Plone 5:\nJens Klein, BlueDynamics Alliance - `Klein & Partner KG <http://kleinundpartner.at>`_\n\nSource Code\n-----------\n\nContributors please read the document `Process for Plone core's development <https://docs.plone.org/develop/coredev/docs/index.html>`_\n\nSources are at the `Plone code repository hosted at Github <https://github.com/plone/Products.PlonePAS>`_.\n\nChangelog\n=========\n\n.. You should *NOT* be adding new change log entries to this file.\n   You should create a file in the news directory instead.\n   For helpful instructions, please see:\n   https://github.com/plone/plone.releaser/blob/master/ADD-A-NEWS-ITEM.rst\n\n.. towncrier release notes start\n\n8.0.2 (2023-07-13)\n------------------\n\nInternal:\n\n\n- Update configuration files.\n  [plone devs] (cfffba8c)\n\n\n8.0.1 (2023-05-25)\n------------------\n\nBug fixes:\n\n\n- Translate error message, simplify error handling. [tschorr] (#75)\n\n\n8.0.0 (2023-04-06)\n------------------\n\nBreaking changes:\n\n\n- Remove `ldapmp` module. It is not being tested in Plone 6.\n  See https://github.com/plone/Products.PlonePAS/pull/71#pullrequestreview-1351349950\n  [gforcada] (#1)\n\n\nInternal:\n\n\n- Update configuration files.\n  [plone devs] (80cf330f)\n\n\n7.0.0 (2022-12-02)\n------------------\n\nBug fixes:\n\n\n- Final release for Plone 6.0.0 (#600)\n\n\n7.0.0b3 (2022-10-11)\n--------------------\n\nBug fixes:\n\n\n- Fix admin password used in tests. [davisagli] (#70)\n\n\n7.0.0b2 (2022-10-03)\n--------------------\n\nNew features:\n\n\n- Increase the minimum password length to 8 characters. [davisagli] (#69)\n\n\n7.0.0b1 (2022-08-31)\n--------------------\n\nBug fixes:\n\n\n- Apply `isort`, `black`, `pyupgrade` and manual removal of six leftovers.\n  Fix `PIL` deprecation warning, assume `PIL` is always there.\n  Make `mypy` happy again.\n  [jensens] (#68)\n\n\n7.0.0a3 (2022-03-09)\n--------------------\n\nNew features:\n\n\n- Add separate `GenericSetup` profile to switch the Zope root `/acl_users` to use a simple\n  cookie login form.  Useful when Zope root login and logout need to synchronize\n  authentication state between multiple plugins, which is not possible with HTTP `Basic\n  ...` authentication. [rpatterson] (#65) (zope-root-cookie)\n\n\n7.0.0a2 (2021-12-29)\n--------------------\n\nBug fixes:\n\n\n- Fixed deprecation warning for ``AccessControl.AuthEncoding``.\n  [maurits] (#64)\n- Fix broken Zope root `/acl_users` cookie plugin on `PlonePAS` install.\n  [rpatterson] (#65)\n\n\n7.0.0a1 (2021-07-28)\n--------------------\n\nBreaking changes:\n\n\n- Drop support for Plone 5.2 and Python 2.7.\n  [maurits] (#61)\n\n\nBug fixes:\n\n\n- Support for Pillow 8. [jensens] (#61)\n- Fixed tests for cookie auth to also work with `zope.interface` 5.3.0.\n  This uses simpler representations for interfaces.\n  Tests now pass with earlier and later versions.\n  [maurits] (#237)\n\n\n6.0.7 (2021-02-16)\n------------------\n\nBug fixes:\n\n\n- Fixes deprection message: `AccessControl.User has moved to AccessControl.users`.\n  [jensens] (#59)\n\n\n6.0.6 (2020-04-23)\n------------------\n\nBug fixes:\n\n\n- Minor packaging updates. (#1)\n\n\n6.0.5 (2019-12-10)\n------------------\n\nBug fixes:\n\n\n- - Notify CredentialsUpdated event when password is changed\n    [ezvirtual] (#33)\n\n\n6.0.4 (2019-12-02)\n------------------\n\nBug fixes:\n\n\n- - Notify PropertiesUpdated event when member properties are changed\n    [ezvirtual]\n\n  - Add simple test for PropertiesUpdated event\n    [ezvirtual] (#27)\n\n\n6.0.3 (2019-11-25)\n------------------\n\nBug fixes:\n\n\n- Log exception from PAS logout() instead of swallowing them\n  [ajung] (#50)\n- Fix deprecated imports.\n  Fix buildout infrastructure for Plone 5.2.\n  [thet] (#51)\n- Create the MemberData object from an adapter instead of directly instantiating it, as intended in Products.CMFCore.MemberDataTool.\n  This allows for better extensibility.\n  [thet] (#52)\n\n\n6.0.2 (2019-04-29)\n------------------\n\nBug fixes:\n\n\n- Avoid ResourceWarning messages.\n  [gforcada] (#47)\n\n\n6.0.1 (2018-12-11)\n------------------\n\nBug fixes:\n\n\n- Change `im_self` to `__self__` [vangheem] (#43)\n\n\n6.0.0 (2018-11-05)\n------------------\n\nBreaking changes:\n\n- Adapt to changes of MemberData in CMFCore.\n  Fixes https://github.com/plone/Products.PlonePAS/issues/24\n  [pbauer]\n\nNew features:\n\n- Make it work in Python 3:\n  Make imports work.\n  Fix startup.\n  Fix setting the auth-cookie.\n  Fix assignment of MemberData-functions during startup.\n  User properties are text.\n  Fix scaling user profile.\n  Migrate all tests away from PloneTestCasei.\n  Fix other tests.\n  [pbauer]\n\nBug fixes:\n\n- InitializeClass was moved to AccessControl.class_init\n  [jensens]\n\n- setDefaultRoles is deprecated.\n  addPermission from AccessControl.Permission is used.\n  [jensens]\n\n- Removed ``Extensions/Install.py`` which had only backwards compatibility imports.\n  [maurits]\n\n- Report home_page as empty when it is suspicious.\n  It may for example contain javascript.\n  Part of PloneHotfix20171128.\n  [maurits]\n\n- Remove setAuthCookie script. #1801\n  This used to be a hook to allow overriding the credentials update. The\n  default override has been used as the new implementation.\n  [tlotze]\n\n\n5.0.14 (2017-05-09)\n-------------------\n\nBug fixes:\n\n- Remove WarningInterceptor (CMFCore) - it is gone in newer versions.\n  [jensens]\n\n\n5.0.13 (2016-11-09)\n-------------------\n\nBug fixes:\n\n- In getMemberInfo, if a property is not present it now returns an\n  empty string, rather than raising an exception. This fixes login for\n  sites that have location removed.\n  [MatthewWilkes]\n\n\n5.0.12 (2016-09-09)\n-------------------\n\nBug fixes:\n\n- Depend on plone.protect 2.0.3 or higher.\n  Fixes https://github.com/plone/Products.PlonePAS/issues/21\n  [maurits]\n\n\n5.0.11 (2016-05-20)\n-------------------\n\nBug fixes:\n\n- Use the _marker from CMFCore for MemberDataTool.getProperty,\n  this makes sure that we never return the _marker from PlonePAS\n  but an error.\n  [pcdummy]\n\n- Don't raise an ValueError if a property doesn't exists for a ZOPE\n  user.\n  [pcdummy]\n\n\n5.0.10 (2016-05-02)\n-------------------\n\nFixes:\n\n- Fix UnicodeDecodeError in searchForMembers by using safe_unicode.\n  [pbauer]\n\n\n5.0.9 (2016-03-03)\n------------------\n\nNew:\n\n- Notify new IGroupDeletedEvent when deleting a group.\n  [DieKatze]\n\n\n5.0.8 (2016-02-24)\n------------------\n\nFixes:\n\n- Let ``cleanId`` return a string when getting a unicode.  [maurits]\n\n- Fixed AttributeError with Python 2.6 when reading setup.py.  [maurits]\n\n\n5.0.7 (2016-01-08)\n------------------\n\nFixes:\n\n- Fixed typo in documentation.  [gforcada]\n\n\n5.0.6 (2015-12-16)\n------------------\n\nFixes:\n\n- bring back Python 2.6 support (in 2.6 depend on orderedict) and import\n  conditional with fallback.\n  [gforcada, jensens]\n\n\n5.0.5 (2015-12-08)\n------------------\n\nFixes:\n\n- Applied Hotfix 2015-12-08.\n\n\n5.0.4 (2015-09-20)\n------------------\n\n- Removed tests for non-utf-8 encodings.\n  [esteele]\n\n\n5.0.3 (2015-07-18)\n------------------\n\n- Allow to set a property to None.\n  [ebrehault]\n\n\n5.0.2 (2015-05-04)\n------------------\n\n- Prevent CRSF protecting errors when logging out because of\n  Zope2 write on read issues\n  [vangheem]\n\n- Reduce logging level for while patching from info down to debug.\n  [jensens]\n\n\n5.0.1 (2015-03-21)\n------------------\n\n- Add a integrated test setup with codeanalysis and travis. For this moved\n  ``Products`` folder to a ``src`` folder in order to follow the package\n  structure expected by ``buildout.plonetest``'s ``qa.cfg``.\n  [jensens]\n\n- Make patching of LDAPMultiPlugin explicit. Code using those must call\n  ``Products.PlonePAS.ldapmp.patch_ldapmp`` with no parameters in order\n  to activate the patches.\n  [jensens]\n\n- Removed (optional) Archetypes Storage (used in past with CMFMember, which\n  itself was long time ago superseded by Membrane). Probably dead code. If\n  there's someone out there needing it in Plone 5 please copy the code from\n  git/Plone4 in your addon/project.\n  [jensens]\n\n- Moved ``Extensions/Install.py`` functions to setuphandlers, kept BBB import\n  for ``activatePluginInterfaces`` since this is imported by ``borg.localrole``.\n  [jensens]\n\n- Expect Python 2.7 with ``collections.OrderedDict``.\n  [jensens]\n\n- Remove nasty dependency to Products.CMFDefault.\n  [jensens]\n\n- Cleanup patches, allow introspection by using wrap_method, add roles using wrap_method,\n  add deprecation and merge ``gruf_support.py`` in ``pas,py`` to have a better overview\n  what is patched.\n  [jensens]\n\n- Cleanup: PEP8 et all, zca decorators, rough code review\n  [jensens]\n\n- In searchForMembers, ensure that request parameters are properly\n  decoded to unicode\n  [do3cc]\n\n\n5.0 (2014-04-05)\n----------------\n\n- Do not write member data on read\n  [vangheem]\n\n- Allow ``properties`` to be passed to ``PloneUser.setProperties``.\n  This was previously ignored as ``setProperties`` solely utilised\n  keyword arguments.\n  [davidjb]\n\n\n4.1.2 (2014-01-27)\n------------------\n\n- Don't try to migrate the root user folder if the portal has no parent.\n  [davisagli]\n\n- Use batteries included odict implementation in favour of homegrown one.\n  [tomgross]\n\n- Use correct methods for getting users from id or names\n  [tomgross]\n\n- Ported tests to plone.app.testing\n  [tomgross]\n\n4.1.1 (2013-03-05)\n------------------\n\n- Fix a bug in setSecurityProfile where the login name was passed\n  instead of the user id.\n  [davisagli]\n\n- Added empty updateUser and updateEveryLoginName methods in\n  ZODBMutablePropertyProvider to fulfill the new standards of the\n  IUserEnumerationPlugin.\n  [maurits]\n\n\n4.1 (2013-01-01)\n----------------\n\n- Fix assignRoleToPrincipal to work with new Products.PluggableAuthService 1.10.0.\n  [maurits]\n\n- Fix saving, getting and deleting the user portrait for non-standard\n  user ids like 'bob-jones' or 'bob-jones+test@example.org'.\n  [maurits]\n\n- Fix the test for the current password if the user id differs from\n  the login name.\n  [maurits]\n\n\n4.1a2 (2012-08-29)\n------------------\n\n- Bug fix: User with e-mail login got 'Insufficient Privileges' when\n  trying to delete own portrait. Fixes http://dev.plone.org/ticket/12819.\n  [patch by kagesenshi, applied by kleist]\n\n- MembershipTool.searchForMembers() now preserves sort order.\n  Fixes http://dev.plone.org/ticket/11716.\n  [patch by neaj, applied by kleist]\n\n- Changed deprecated getSiteEncoding to hardcoded `utf-8`\n  [tom_gross]\n\n\n4.1a1 (2012-06-29)\n------------------\n\n- Allow members with usernames that contain special characters\n  (such as @ when use email to login), set their own member portrait\n  [erral]\n\n- PEP8 Cleanup\n  [pbdiode]\n\n- Add a default password validation policy as PAS plugin,\n  see http://dev.plone.org/ticket/10959\n\n- Extensions/Install.py: Don't use list as default argument value\n  to activatePluginInterfaces()\n  [patch by rossp, applied by kleist]\n\n\n4.0.13 (2012-05-07)\n-------------------\n\n- Require ListPortalMembers permission for searchForMembers\n  so anonymous users can not get a list of site users.\n  [vangheem]\n\n\n4.0.12 (2012-04-09)\n-------------------\n\n- Make sure that during registration you can change your member\n  portrait (if this has been enabled the member registration config).\n  Refs http://dev.plone.org/ticket/5432\n  [maurits]\n\n\n4.0.11 (2012-02-08)\n-------------------\n\n- Do some more checks when changing or deleting a member portrait.\n  Fixes http://dev.plone.org/ticket/5432\n  [maurits]\n\n- Pass request along to getGroupsForPrincipal for caching purposes.\n  [esteele]\n\n\n4.0.10 (2012-01-04)\n-------------------\n\n- Fixed typo in method name hasOpenIDExtractor, keeping the old name\n  (hasOpenIDdExtractor) around for backwards compatibility.\n  Fixes http://dev.plone.org/ticket/11040\n  [maurits]\n\n\n4.0.9 (2011-11-24)\n------------------\n\n- Avoid a failure when we try to add a role to principal that is managed by\n  an other plugin.\n  [thomasdesvenain]\n\n- Cleaned up and reduced dependencies. New extra ``atstorage`` for the rare case\n  someone uses PlonePAS w/o Plone but with Archetypes (if this is this\n  possible). [jensens]\n\n4.0.8 - 2011-06-30\n------------------\n\n- Fire IPrincipalDeleted when a user is deleted.\n  [stefan, ggozad]\n\n4.0.7 - 2011-05-12\n------------------\n\n- Copy in CleanupTemp from CMFCore as it has been removed from CMFCore 2.3.\n  [elro]\n\n- Move import step to be registered in ZCML rather than XML.\n  Remove the non-existent dependency on `plonepas-content`.\n  [kiorky]\n\n4.0.6 - 2011-02-25\n------------------\n\n- Fix missing and broken security declarations.\n  [davisagli]\n\n4.0.5 - 2011-02-14\n------------------\n\n- Avoid breaking on startup if PIL isn't present.\n  [davisagli]\n\n- Use 'defaultUser.png' as the default user portrait, since the .gif version\n  has been deprecated for a long time now. See\n  http://dev.plone.org/plone/changeset/36350\n  [mj]\n\n4.0.4 - 2011-01-03\n------------------\n\n- Remove plone.openid dependency in setup.py, import errors are already caught\n  in PASInfoView.\n  [elro]\n\n- The code to search by id in mutable_properties.enumerateUsers didn't work at\n  all, an exception was always raised and it was actually a good thing.\n  We tried to implement it in 3.10 and we had strange listing in Plone UI. Then\n  we reverted it in the next version so the behavior was backward compatible\n  with previous versions.\n  If we allow search by id, we can potentially break other part of the code. For\n  example acl_users/portal_role_manager/manage_roles will break because\n  Products.PluggableAuthService.plugins.ZODBRoleManager.listAssignedPrincipals\n  raises MultiplePrincipalError, and maybe it will break somewhere else.\n  Versions 4.0.4 and 3.13 use now the same algorithm.\n  References http://dev.plone.org/plone/ticket/9361\n  [vincenfretin]\n\n- When calling editGroup method, avoid error\n  while trying to remove dynamic 'AuthenticatedUsers' group.\n  [thomasdesvenain]\n\n- In Plone 4.1+, create a Site Administrators group with the new Site\n  Administrator role.\n  [davisagli]\n\n- Fix critical error on groupprefs page\n  when some groups have a non-ascii character in their title.\n  Sort groups on their title normalized.\n  This fixes http://dev.plone.org/plone/ticket/11301\n  [thomasdesvenain]\n\n- Fix interface error: doChangeUser takes a user id as parameter,\n  not a login name.\n  [wichert]\n\n4.0.3 - 2010-09-09\n------------------\n\n- Check we have a REQUEST attribute before accessing it in\n  getRolesForPrincipal.\n  [vincentfretin]\n\n- Use safe_unicode to correctly find users with\n  non-ascii properties, regardless of the sys.defaultencoding.\n  This fixes http://dev.plone.org/plone/ticket/10898\n  [mr_savage]\n\n4.0.2 - 2010-08-08\n------------------\n\n- Made last_login_time logic compatible with DateTime 2.12.5.\n  [hannosch]\n\n4.0.1 - 2010-07-31\n------------------\n\n- Clean up some unused imports and variable assignments.\n  [esteele]\n\n- Stop looking to GRUF to check if group properties can be edited.\n  [esteele]\n\n4.0 - 2010-07-18\n----------------\n\n- Avoid a deprecation warning for the credentialsChanged method.\n  [hannosch]\n\n- Fixed problems with missing user cache invalidation. This closes\n  http://dev.plone.org/plone/ticket/10715.\n  [fafhrd, hannosch]\n\n- Make VirtualGroup inherit from PropertiedUser so it gets wrapped correctly.\n  Have getGroupsForPrincipal not return the AutoGroup as a member of itself.\n  Closes http://dev.plone.org/plone/ticket/10568.\n  [cah190]\n\n- PluggableAuthService expects a list of group ids from getGroups, don't pass a\n  list of wrapped groups instead.\n  [cah190, esteele]\n\n- Added a custom `IMembershipTool` interface to PlonePAS extending the base one\n  from CMFCore. It adds the `getMemberInfo` method to the mix. This closes\n  http://dev.plone.org/plone/ticket/10240.\n  [hannosch]\n\n4.0b9 - 2010-06-03\n------------------\n\n- Fixed a test to no longer use removed Large Plone Folder type.\n  [davisagli]\n\n4.0b8 - 2010-05-01\n------------------\n\n- Removed special unauthorized view workaround, after the underlying issue\n  has been fixed in Zope2.\n  [davisagli, hannosch]\n\n4.0b7 - 2010-04-07\n------------------\n\n- Added manage_setMembersFolderById method for ZMI.\n  Fixes http://dev.plone.org/plone/ticket/10400\n  [daftdog]\n\n4.0b6 - 2010-03-05\n------------------\n\n- Revert incorrect PIL import change.\n  [hannosch]\n\n4.0b5 - 2010-03-03\n------------------\n\n- Install recursive_groups in new sites by default. Make it the last\n  IGroupsPlugin installed.\n  [esteele]\n\n- Remove caching of utils.py's getGroupsForPrincipal method as it was nastily\n  overzealous.\n  [esteele, cah190]\n\n- Use sets instead of util.py's 'unique' method.\n  [esteele]\n\n4.0b4 - 2010-02-18\n------------------\n\n- Properly import from PIL 1.1.7\n  [tom_gross]\n\n- Cache getGroupsForPrincipal per principal id per request (when available).\n  [esteele]\n\n4.0b3 - 2010-01-31\n------------------\n\n- Role plugin's tests no longer subclass (and run all of) ZODBRoleManagerTests\n  as they cannot properly handle the plugin's expectation of finding a\n  PluginRegistry with IGroupsPlugin\n  [erikrose, esteele]\n\n- Revert changes made to ZODBMutablePropertyProvider's enumerateUsers method\n  which prevented lookup of users by id. Some refactoring.\n  Refs http://dev.plone.org/plone/ticket/9361\n  [erikrose, esteele]\n\n- GroupAwareRoleManager now properly computes the roles of deeply-nested\n  principals.\n  [erikrose, esteele]\n\n- Factor up getGroupsForPrincipal call.\n  [erikrose, esteele]\n\n- AutoGroup now implements IPropertiesPlugin to return group title and description.\n  [erikrose, esteele]\n\n- GroupsTool's getGroupsForPrincipal and getGroupMembers now return a list\n  made up of groups/members from all responding plugins instead of just the\n  first responder.\n  [erikrose, esteele]\n\n- Remove GroupData's _gruf_getProperty method, move remaining functionality\n  into getProperty. getProperty now searches for properties in the following\n  places: property sheets directly on the group object, PAS\n  IPropertyProviders, portal_groupdata properties, and attributes on its\n  GroupData entry. It returns the first piece of data found.\n  Closes http://dev.plone.org/plone/ticket/9828\n  [erikrose, esteele]\n\n- Added __ignore_direct_roles__ request flag to getRolesForPrincipal() to\n  permit retrieval of only group-provided (inherited) roles.\n  [cah190]\n\n- getGroupsForPrincipal is a method of PAS' IGroupsPlugin, adjust the groups\n  tool's plugin lookup accordingly.\n  [esteele]\n\n- Rework the group detection of the ZODBMutablePropertyProvider so that\n  enumerateUsers only returns users.\n  [esteele]\n\n- Add, but don't activate, a recursive groups plugin on installation.\n  [esteele]\n\n- Set proper titles for default groups.\n  [esteele]\n\n- Avoid the use of the classImplements helper from PAS. It dealt with the now\n  gone Zope2 Interface variants and is no longer needed.\n  [hannosch]\n\n- Fix a misnamed kwarg in autogroup plugin.\n  [cah190]\n\n- Allow the groups tool's searchForGroups to handle an empty search string as\n  'find all'.\n  [esteele, cah190]\n\n- Allow PASSearchView's searchGroups method to accept a sorting option.\n  [esteele]\n\n- Apply deiter's patch from http://dev.plone.org/plone/ticket/9460 to prevent\n  GroupManager's 'getGroupById' from returning groups managed by other group\n  managers.\n  [esteele]\n\n- GroupsTool.editGroup() now stores title and description in PAS\n  propertysheets in addition to Plone-specific tools. This helps us not pave\n  over group titles with IDs.\n  [erikrose]\n\n- Query the correct keyword variable for the group's description.\n  [esteele]\n\n- Fix an incorrect setdefault syntax.\n  Closes http://dev.plone.org/plone/ticket/7345\n  [esteele]\n\n4.0b2 - 2010-01-02\n------------------\n\n- Don't specify PIL as a direct dependencies. It is not installed as an egg on\n  all platforms.\n  [hannosch]\n\n4.0b1 - 2009-12-27\n------------------\n\n- Fixed package dependencies declaration.\n  [hannosch]\n\n4.0a2 - 2009-12-16\n------------------\n\n- Added backwards compatibility alias for PloneTool to support upgrades from\n  Plone 2.5 to work.\n  [hannosch]\n\n- Added 'has_email' to the info returned by getMemberInfo.\n  Refs http://dev.plone.org/plone/ticket/8707\n  [maurits]\n\n4.0a1 - 2009-11-14\n------------------\n\n- Simplified ``pas_member`` view.  Also return info when no member\n  with the requested id exists, so this can be safely used also to get\n  \"member info\" for deleted members.\n  [maurits]\n\n- Added new ``pas_member`` view, which provides easy access to the membership\n  tools getMemberInfo method but caches the result on the request.\n  [hannosch]\n\n- Changed the default value of `memberareaCreationFlag` for the membership\n  tool to False, as it was done during Plone site creation so far.\n  [hannosch]\n\n- Removed patch on ZODBUserManager.enumerateUsers which was introduced\n  historical because of a former missing release of PluggableAuthService 1.5.\n  This now superfluous patch also reduced the functionality of the\n  patched method and introduced different behavior compared to i.e in\n  a similar method on LDAPMultiPlugins. For details on the former\n  patch see:\n  http://dev.plone.org/collective/changeset/41512/PlonePAS/trunk/pas.py\n  [jensens]\n\n- Moved a couple DTML files here from CMFPlone that got left out of the earlier\n  refactoring.\n  [davisagli]\n\n- Added a view of the Unauthorized exception which re-raises that exception\n  in order to make sure that it triggers PAS' challenge plugin rather than\n  rendering the standard_error_message.\n  [davisagli]\n\n- Removed deprecation warnings for various methods. These never happened.\n  [hannosch]\n\n- Removed half-done ZCacheable caching for users and groups.\n  [hannosch]\n\n- Removed the CMFDefault dependency of the membership tool. We only need the\n  CMFCore functionality.\n  [hannosch]\n\n- PlonePAS.gruf_support.authenticate method was not breaking out of\n  the loop upon successful authenticateCredentials.\n  [runyaga]\n\n- Changed objectIds and objectValues calls to use the IContainer API.\n  [hannosch]\n\n- Removed parts of the outdated Extensions.Install code.\n  [hannosch]\n\n- Removed a dependency on CMFPlone's `_createObjectByType` method.\n  [hannosch]\n\n- Removed magical `homePageText` lookup for initial memberarea content. You\n  can use the `notifyMemberAreaCreated` hook for any kind of custom behavior.\n  [hannosch]\n\n- Moved the `scale_image` function from CMFPlone.utils into our own utils\n  module, as we are the only user of it. Also made the tests independent of\n  any CMFPlone code.\n  [hannosch]\n\n- Cleaned up package metadata.\n  [hannosch]\n\n- Declare test dependencies in an extra and fixed deprecation warnings\n  for use of Globals.\n  [hannosch]\n\n- Switched the installation progress reporting to the logging framework.\n  [hannosch]\n\n- Cleaned up annoying license headers in all files. We have a central place\n  to state the license.\n  [hannosch]\n\n- Started cleaning up deprecated methods and comments.\n  [hannosch]\n\n- Removed support for group workspaces. This part from GRUF hasn't been\n  supported for many releases anymore.\n  [hannosch]\n\n- Merged all code for the groups tool from GRUF into this package, we are\n  officially GRUF-dependency-free :)\n  [hannosch]\n\n- Merged all code for the group data tool from GRUF into this package.\n  [hannosch]\n\n- Removed the GRUFBridge plugin. PAS inside GRUF isn't supported anymore.\n  [hannosch]\n\n- Merged tests moved from CMFPlone into the same modules as the existing\n  tests and normalized file names.\n  [hannosch]\n\n- Modernized tests and introduce a proper base testcase and layer.\n  [hannosch]\n\n- Removed cookie auth tests, these don't work anymore with plone.session.\n  [hannosch]\n\n- Moved over all tests for the four tools from CMFPlone.\n  [hannosch]\n\n- Removed the user folder migration code and cleaned up tests.\n  [hannosch]\n\n- Moved all code from the four tools from CMFPlone into this package.\n  [hannosch]\n\n- Removed 'listed' member property support from one of the many search\n  functions following Plone.\n  [hannosch]\n\n- Copied setLoginFormInCookieAuth from CMFPlone migrations.\n  [hannosch]\n\n- Purged old Zope 2 Interface interfaces for Zope 2.12 compatibility.\n  (only a test in this case)\n  [elro]\n\n\n3.12 - 2009-10-16\n-----------------\n\n- Fixed the performance fix again. enumerateUsers from mutable_properties\n  plugin should return all the users if kw is empty. And it returns empty\n  tuple if login or id parameter is used.\n  [vincentfretin]\n\n\n3.11 - 2009-10-05\n-----------------\n\n- Revert performance fix introduced in 3.10 for the mutable properties plugin.\n  enumerateUsers shouldn't return results if id or login is not None like in\n  3.9 (data dict doesn't contain id or login key, so testMemberData returns\n  always False). The search should be performed only if kw parameter is not\n  empty. This is the new optimization fix.\n  [vincentfretin]\n\n\n3.10 - 2009-09-06\n-----------------\n\n- Performance fix for searching in the mutable properties plugin:\n  when only searching on user id do not walk over all properties,\n  but only test if the user id is known. This fixes\n  http://dev.plone.org/plone/ticket/9361\n  [toutpt]\n\n- Nested groups are now visible in prefs_group_members. This closes\n  http://dev.plone.org/plone/ticket/8557\n  [vincentfretin]\n\n- Add sort and merge PASSearchView's interface to prevent code duplication.\n  [csenger]\n\n\n3.9 - 2009-04-21\n----------------\n\n- Fix the cookie plugin's login handler to not trust the username\n  from the request. Instead we use the login name of the currently\n  authenticated user. This fixes CVE-2009-0662 (see\n  http://plone.org/products/plone/security/advisories/cve-2009-0662\n  for more information).\n  [wichert]\n\n\n3.8 - 2009-02-13\n----------------\n\n- Update the role manager's assignRoleToPrincipal method to lazily\n  update the cached list of portal roles. This fixes problems with\n  adding users with GenericSetup-created roles.\n  [wichert]\n\n- Fixed our OrderedDict to be unpickable with pickle protocol 2. On\n  unpickling a __init__ method is not called and an optimization in\n  protocol 2 would call __setitem__ without the _list to be initialized.\n  Even using a __getstate__ / __setstate__ combination wouldn't work\n  around that. This change was found in using membrane and\n  MemcachedManager.\n  [hannosch, tesdal]\n\n\n3.7 - 2008-09-28\n----------------\n\n- Removed deprecation zcml statements for PluggableAuthService components:\n  these are now in PluggableAuthService itself.\n  [wichert]\n\n- Adjusted deprecation warnings to point to Plone 4.0 instead of Plone 3.5\n  since we changed the version numbering again.\n  [hannosch]\n\n\n3.6 - 2008-06-25\n----------------\n\n- Modify PloneGroup.getMemberIds to use all IGroupIntrospection plugins\n  to get the group members. This makes it possible to list members in\n  an LDAP group.\n  [wichert]\n\n\n3.5 - 2008-06-25\n----------------\n\n- Make PASSearchView.merge actually merge search results. Its previous\n  behaviour was quite nasty: it preferred search results from the\n  enumeration plugin with the lowest priority!\n  [wichert]\n\n\n3.4 - 2008-03-26\n----------------\n\n- Added BBB code for changed setLoginFormInCookieAuth upgrade method.\n  [hannosch]\n\n- Ignore but log users without passwords during migration from pre-PAS, as\n  these cannot be added to any standard user source.\n  [hannosch]\n\n- Fix listRoleInfo on the role plugin to also lazily update the list\n  of portal roles.\n  [wichert]\n\n3.3 - 2007-03-07\n----------------\n\n- Added metadata.xml file to the profile.\n  [hannosch]\n\n- Move global role lookup out of the local role plugin. Part of the\n  PLIP 127 merge for Plone 3.1.\n  [alecm]\n\n\n3.2 - 2008-02-15\n----------------\n\n- Fix schema handling for ZODBMutablePropertyProvider initialization.\n  [maurits]\n\n- Remove some exception swallowing from the installation logic so errors\n  are not hidden.\n  [hannosch]\n\n- Correct handling an empty roles list when modifying groups.\n  This fixes http://dev.plone.org/plone/ticket/6994\n  [rsantos]\n\n\n3.1 - 2007-10-08\n----------------\n\n- Improve handing of sorting for searches.\n  [csenger]\n\n- Updating the roles for a group did not invalidate the _findGroup cache.\n  [wichert]\n\n- Fixed some tool icons to point to existing icons.\n  [hannosch]\n\n\n3.0 - 2007-08-16\n----------------\n\n- Fix check for authenticateCredentials return value\n  [rossp]\n\n\n3.0rc2 - 2007-07-27\n-------------------\n\n- Fake a getPhysicalPath on our search view so ZCacheing works properly\n  everywhere.\n  [wichert]\n\n- Add event classes for logged-in and logged-out events.\n  [wichert]\n\n\n3.0rc1 - 2007-07-08\n-------------------\n\n- Correct logic in MemberData capability methods: any plugin is\n  allowed to (re)set a password, delete the user or add roles.\n  [wichert]\n\n- Use the proper API to get the containing PAS in the group plugin\n  [wichert]\n\n- Fix setting user properties on the user object.\n  [wichert]\n\n\n3.0b7 - 2007-05-05\n------------------\n\n- Removed the five:registerPackage statement again. It causes problems in a\n  ZEO environment.\n  [hannosch]\n\n- Removed our version of the Plone tool from ToolInit. It won't get an icon\n  anymore and you cannot add it, but existing instances still work. We\n  migrate all instances back to the regular tool anyways.\n  [hannosch]\n\n\n3.0b6 - 2007-05-05\n------------------\n\n- Fixed two migration related test failures.\n  [hannosch]\n\n- Spring cleaning, removed some cruft, pyflaked and corrected some more\n  undefined names.\n  [hannosch]\n\n- New package layout, following standard Python package conventions.\n  [hannosch]\n\n- Fixed tool names in ToolInit, so the permission has a proper name. This\n  closes http://dev.plone.org/plone/ticket/6525.\n  [hannosch]\n\n\n3.0-beta5 - 2007-05-02\n----------------------\n\n- Modify the roles plugin to lazily update its roles list from the portal.\n  [wichert]\n\n- Filter duplicate search results.\n  [laz, wichert]\n\n- Add a sort_by option to the search methods to allow sorting of results\n  by a property.\n  [laz, wichert]\n\n- Modify login method for the cookie plugin to perform the credential\n  update in the PAS of the user instead of the PAS of the plugin. This\n  helps in making sure that users will only authenticate against their\n  own user folder, so we get all their roles, properties, etc. correctly.\n  [wichert]\n\n- Update installation logic to use plone.session for cookies\n  [wichert]\n\n- Add pas_info and pas_search browser views.\n  [wichert]\n\n- Deprecate the PlonePAS PloneTool; its changes have been merged in the\n  standard Plone version.\n  [wichert]\n\n- Use getUtility to get the portal object.\n  [wichert]\n\n- Deprecate user and group searching through CMF member and group tools\n  in favour of PAS enumeration.\n  [wichert]\n\n- Refactor user searching in the membership tool to use standard PAS\n  searches.\n  [wichert]\n\n- Add user enumeration capabilities to the mutable properties plugin.\n  [wichert]\n\n- Add a new automatic group plugin which puts all users in a virtual\n  group. This is useful for permissions handling: since it is not\n  possible to add roles to users with the Authenticated role a\n  virtual group can be used instead.\n  [wichert]\n\n- Added support to import PloneUserFactory and added stub\n  for ZODBMutableProperties. Attention: Latter needs a real\n  export and import! At the moment it do not export the\n  propertysheets. This is a TODO. At least with this two\n  additions PlonePAS import runs. Additional I needed to\n  hack PluginRegistry and and PluggableAuthService slightly.\n  [jensens]\n\n- Added HISTORY.txt and updated version information.\n  [hannosch]\n\n\n2.4 - 2007-04-15\n----------------\n\n- Optomise the local roles plugin for the common case where\n  local_roles is empty\n  [dreamcatcher]\n\n- the plone user was assuming a one to one mapping between property plugin\n  and user property sheet, and stripping away additional ones as part of\n  the retrieval of ordered sheets, instead, it now stores all\n  propertysheets in an ordered dictionary, so this assumption is not needed\n  [k_vertigo]\n\n- More postonly security changes\n  [alecm, ramon]\n\n\n2.3 - 2007-05-30\n----------------\n\n- Use a local postonly decorator so PlonePAS can be used with Plone\n  2.5, 2.5.1 and 2.5.2.\n  [wichert]\n\n- Protect the tools with postonly security modifiers.\n  [mj]\n\n- Update GRUF compatibility functions to use the same security checks\n  as GRUF itself uses.\n  [mj]\n\n- Fix migration to handle properties of selection or multiple selection\n  types.\n  [reinout]\n\n- Correct creation of groups which default group managers.\n  [dreamcatcher]\n\n- Fix migration from GRUF sites: also include the member properties in the\n  migration.\n  [tesdal]\n\n- Correct the test for creation of groups with the same id as users: search\n  for the exact id, not substrings.\n  [tesdal]\n\n- Fix bad form action which made it impossible to add a plone user factory\n  plugin through the ZMI. Backported from trunk.\n  [wichert]\n",
    "bugtrack_url": null,
    "license": "ZPL",
    "summary": "PlonePAS modifies the PluggableAuthService for use by Plone.",
    "version": "8.0.2",
    "project_urls": {
        "Homepage": "https://github.com/plone/Products.PlonePAS"
    },
    "split_keywords": [
        "zope",
        "cmf",
        "plone",
        "pas",
        "authentication"
    ],
    "urls": [
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "fb99a6730f822463e15a8f6d0690dd67d0c8c7f2a3b5d7350cf65e46ce375d7d",
                "md5": "3177df4c267196b48f998b3194391191",
                "sha256": "623c630cc8b75d3ba931d327fcb95176ab193ba075a4e0938eb5918cc931c355"
            },
            "downloads": -1,
            "filename": "Products.PlonePAS-8.0.2-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "3177df4c267196b48f998b3194391191",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.8",
            "size": 120263,
            "upload_time": "2023-07-13T22:08:35",
            "upload_time_iso_8601": "2023-07-13T22:08:35.031078Z",
            "url": "https://files.pythonhosted.org/packages/fb/99/a6730f822463e15a8f6d0690dd67d0c8c7f2a3b5d7350cf65e46ce375d7d/Products.PlonePAS-8.0.2-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": "",
            "digests": {
                "blake2b_256": "3a545a68fd4559e5a0b9b751e200299b7294c9496be2479a2f9e282f446024cc",
                "md5": "f2afcfb8770337606b6edb8defa7f06d",
                "sha256": "299f591f02d3dd10e679d081040eda0bd80a619c16ff470b96cd95d6575f0293"
            },
            "downloads": -1,
            "filename": "Products.PlonePAS-8.0.2.tar.gz",
            "has_sig": false,
            "md5_digest": "f2afcfb8770337606b6edb8defa7f06d",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.8",
            "size": 126801,
            "upload_time": "2023-07-13T22:08:39",
            "upload_time_iso_8601": "2023-07-13T22:08:39.539513Z",
            "url": "https://files.pythonhosted.org/packages/3a/54/5a68fd4559e5a0b9b751e200299b7294c9496be2479a2f9e282f446024cc/Products.PlonePAS-8.0.2.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2023-07-13 22:08:39",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "plone",
    "github_project": "Products.PlonePAS",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": true,
    "tox": true,
    "lcname": "products.plonepas"
}
        
Elapsed time: 0.09987s