Skip to content

Commit

Permalink
Make collective.deletepermission dependency optional.
Browse files Browse the repository at this point in the history
The ``collective.deletepermission`` dependency is optional from now on.
There is a new ``ftw.lawgiver [deletepermission]`` extras.

``collective.deletepermission`` is still considered a good thing, but it
is quite invasive as it patches various parts of Plone and introduces a
new permission. It may not be helpful in all projects.

The goal is to make lawgiver useable in an environment where
``collective.deletepermission`` cannot be installed.

The "delete objects" permission is mapped differently depending on
whether ``collective.deletepermission`` is installed, since the meaning
of the permission changes.
  • Loading branch information
jone committed Jul 10, 2017
1 parent 9466a17 commit b81ff7b
Show file tree
Hide file tree
Showing 20 changed files with 702 additions and 56 deletions.
19 changes: 11 additions & 8 deletions README.rst
Expand Up @@ -666,21 +666,24 @@ makes it easy to translate it to other languages for multilingual sites.
Specialities
------------

Deleting content
~~~~~~~~~~~~~~~~

The ``ftw.lawgiver`` uses `collective.deletepermission`_. If you generate a
workflow using lawgiver and install it in production without lawgiver, be sure
to install `collective.deletepermission`_!
Deleting content with ``collective.deletepermission``
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

`collective.deletepermission`_ solves a delete problem which occurs in certain
situations by adding a new delete permission. See its readme for further
`collective.deletepermission`_ solves a delete problem, which occurs in certain
situations, by adding a new delete permission. See its readme for further
details.

For being able to delete content, the user should have the ``delete`` action
group (``Delete portal content``) on the content but also ``add`` (``Delete objects``)
on the parent content.

``ftw.lawgiver`` works well with `collective.deletepermission`_.
Use the extras ``ftw.lawgiver [deletepermission]`` in order to install the
lawgiver with `collective.deletepermission`_.

Be aware that when you generate your workflows with `collective.deletepermission`_
installed, you need to install `collective.deletepermission`_ in production too.


Uninstall
---------
Expand Down
4 changes: 3 additions & 1 deletion docs/HISTORY.txt
Expand Up @@ -5,7 +5,9 @@ Changelog
1.9.2 (unreleased)
------------------

- Nothing changed yet.
- Make ``collective.deletepermission`` dependency optional.
If you upgrade to this version of ``ftw.lawgiver`` you most likely
want to enable the ``ftw.lawgiver [deletepermission]`` extra. [jone]


1.9.1 (2017-07-10)
Expand Down
23 changes: 18 additions & 5 deletions ftw/lawgiver/lawgiver.zcml
@@ -1,6 +1,7 @@
<configure
xmlns="http://namespaces.zope.org/zope"
xmlns:lawgiver="http://namespaces.zope.org/lawgiver"
xmlns:zcml="http://namespaces.zope.org/zcml"
i18n_domain="ftw.lawgiver">

<include package="ftw.lawgiver" file="meta.zcml" />
Expand Down Expand Up @@ -67,7 +68,6 @@
Add portal events,
Add portal folders,
Add portal topics,
Delete objects,
PloneFormGen: Add Content,
plone.app.collection: Add Collection,
plone.app.contenttypes: Add Collection,
Expand All @@ -82,11 +82,24 @@
/>


<lawgiver:map_permissions
action_group="delete"
permissions="Delete portal content"
/>
<configure zcml:condition="installed collective.deletepermission">
<lawgiver:map_permissions
action_group="add"
permissions="Delete objects"
/>

<lawgiver:map_permissions
action_group="delete"
permissions="Delete portal content"
/>
</configure>

<configure zcml:condition="not-installed collective.deletepermission">
<lawgiver:map_permissions
action_group="delete"
permissions="Delete objects"
/>
</configure>

<lawgiver:map_permissions
action_group="manage security"
Expand Down
1 change: 0 additions & 1 deletion ftw/lawgiver/profiles/default/metadata.xml
Expand Up @@ -2,6 +2,5 @@
<metadata>
<version>1300</version>
<dependencies>
<dependency>profile-collective.deletepermission:default</dependency>
</dependencies>
</metadata>
2 changes: 1 addition & 1 deletion ftw/lawgiver/tests/assets/example-4.2/specification.txt
2 changes: 1 addition & 1 deletion ftw/lawgiver/tests/assets/example-4.3.4/specification.txt
@@ -1,5 +1,5 @@
<?xml version='1.0' encoding='UTF-8'?>
<dc-workflow workflow_id="example-4.3.5" title="My Custom Workflow" description="A three state publication workflow" initial_state="example-4.3.5--STATUS--private" state_variable="review_state" manager_bypass="True">
<dc-workflow workflow_id="example-4.3.5-deletepermission" title="My Custom Workflow" description="A three state publication workflow" initial_state="example-4.3.5-deletepermission--STATUS--private" state_variable="review_state" manager_bypass="True">
<permission>ATContentTypes: Add Document</permission>
<permission>ATContentTypes: Add Event</permission>
<permission>ATContentTypes: Add File</permission>
Expand Down Expand Up @@ -41,10 +41,10 @@
<permission>plone.app.collection: Add Collection</permission>
<permission>plone.portlet.collection: Add collection portlet</permission>
<permission>plone.portlet.static: Add static portlet</permission>
<state state_id="example-4.3.5--STATUS--pending" title="Pending">
<exit-transition transition_id="example-4.3.5--TRANSITION--reject--pending_private"/>
<exit-transition transition_id="example-4.3.5--TRANSITION--retract--pending_private"/>
<exit-transition transition_id="example-4.3.5--TRANSITION--publish--pending_published"/>
<state state_id="example-4.3.5-deletepermission--STATUS--pending" title="Pending">
<exit-transition transition_id="example-4.3.5-deletepermission--TRANSITION--reject--pending_private"/>
<exit-transition transition_id="example-4.3.5-deletepermission--TRANSITION--retract--pending_private"/>
<exit-transition transition_id="example-4.3.5-deletepermission--TRANSITION--publish--pending_published"/>
<permission-map name="ATContentTypes: Add Document" acquired="False">
<permission-role>Editor</permission-role>
<permission-role>Reviewer</permission-role>
Expand Down Expand Up @@ -187,9 +187,9 @@
<permission-map name="plone.portlet.collection: Add collection portlet" acquired="False"/>
<permission-map name="plone.portlet.static: Add static portlet" acquired="False"/>
</state>
<state state_id="example-4.3.5--STATUS--private" title="Private">
<exit-transition transition_id="example-4.3.5--TRANSITION--publish--private_published"/>
<exit-transition transition_id="example-4.3.5--TRANSITION--submit-for-publication--private_pending"/>
<state state_id="example-4.3.5-deletepermission--STATUS--private" title="Private">
<exit-transition transition_id="example-4.3.5-deletepermission--TRANSITION--publish--private_published"/>
<exit-transition transition_id="example-4.3.5-deletepermission--TRANSITION--submit-for-publication--private_pending"/>
<permission-map name="ATContentTypes: Add Document" acquired="False">
<permission-role>Editor</permission-role>
<permission-role>Reviewer</permission-role>
Expand Down Expand Up @@ -343,8 +343,8 @@
<permission-map name="plone.portlet.collection: Add collection portlet" acquired="False"/>
<permission-map name="plone.portlet.static: Add static portlet" acquired="False"/>
</state>
<state state_id="example-4.3.5--STATUS--published" title="Published">
<exit-transition transition_id="example-4.3.5--TRANSITION--retract--published_private"/>
<state state_id="example-4.3.5-deletepermission--STATUS--published" title="Published">
<exit-transition transition_id="example-4.3.5-deletepermission--TRANSITION--retract--published_private"/>
<permission-map name="ATContentTypes: Add Document" acquired="False">
<permission-role>Editor</permission-role>
<permission-role>Reviewer</permission-role>
Expand Down Expand Up @@ -479,41 +479,41 @@
<permission-map name="plone.portlet.collection: Add collection portlet" acquired="False"/>
<permission-map name="plone.portlet.static: Add static portlet" acquired="False"/>
</state>
<transition new_state="example-4.3.5--STATUS--published" title="publish" transition_id="example-4.3.5--TRANSITION--publish--private_published" after_script="" before_script="" trigger="USER">
<action category="workflow" icon="" url="%(content_url)s/content_status_modify?workflow_action=example-4.3.5--TRANSITION--publish--private_published">publish</action>
<transition new_state="example-4.3.5-deletepermission--STATUS--published" title="publish" transition_id="example-4.3.5-deletepermission--TRANSITION--publish--private_published" after_script="" before_script="" trigger="USER">
<action category="workflow" icon="" url="%(content_url)s/content_status_modify?workflow_action=example-4.3.5-deletepermission--TRANSITION--publish--private_published">publish</action>
<guard>
<guard-role>Site Administrator</guard-role>
<guard-role>Reviewer</guard-role>
</guard>
</transition>
<transition new_state="example-4.3.5--STATUS--published" title="publish" transition_id="example-4.3.5--TRANSITION--publish--pending_published" after_script="" before_script="" trigger="USER">
<action category="workflow" icon="" url="%(content_url)s/content_status_modify?workflow_action=example-4.3.5--TRANSITION--publish--pending_published">publish</action>
<transition new_state="example-4.3.5-deletepermission--STATUS--published" title="publish" transition_id="example-4.3.5-deletepermission--TRANSITION--publish--pending_published" after_script="" before_script="" trigger="USER">
<action category="workflow" icon="" url="%(content_url)s/content_status_modify?workflow_action=example-4.3.5-deletepermission--TRANSITION--publish--pending_published">publish</action>
<guard>
<guard-role>Site Administrator</guard-role>
<guard-role>Reviewer</guard-role>
</guard>
</transition>
<transition new_state="example-4.3.5--STATUS--private" title="reject" transition_id="example-4.3.5--TRANSITION--reject--pending_private" after_script="" before_script="" trigger="USER">
<action category="workflow" icon="" url="%(content_url)s/content_status_modify?workflow_action=example-4.3.5--TRANSITION--reject--pending_private">reject</action>
<transition new_state="example-4.3.5-deletepermission--STATUS--private" title="reject" transition_id="example-4.3.5-deletepermission--TRANSITION--reject--pending_private" after_script="" before_script="" trigger="USER">
<action category="workflow" icon="" url="%(content_url)s/content_status_modify?workflow_action=example-4.3.5-deletepermission--TRANSITION--reject--pending_private">reject</action>
<guard>
<guard-role>Reviewer</guard-role>
</guard>
</transition>
<transition new_state="example-4.3.5--STATUS--private" title="retract" transition_id="example-4.3.5--TRANSITION--retract--pending_private" after_script="" before_script="" trigger="USER">
<action category="workflow" icon="" url="%(content_url)s/content_status_modify?workflow_action=example-4.3.5--TRANSITION--retract--pending_private">retract</action>
<transition new_state="example-4.3.5-deletepermission--STATUS--private" title="retract" transition_id="example-4.3.5-deletepermission--TRANSITION--retract--pending_private" after_script="" before_script="" trigger="USER">
<action category="workflow" icon="" url="%(content_url)s/content_status_modify?workflow_action=example-4.3.5-deletepermission--TRANSITION--retract--pending_private">retract</action>
<guard>
<guard-role>Editor</guard-role>
</guard>
</transition>
<transition new_state="example-4.3.5--STATUS--private" title="retract" transition_id="example-4.3.5--TRANSITION--retract--published_private" after_script="" before_script="" trigger="USER">
<action category="workflow" icon="" url="%(content_url)s/content_status_modify?workflow_action=example-4.3.5--TRANSITION--retract--published_private">retract</action>
<transition new_state="example-4.3.5-deletepermission--STATUS--private" title="retract" transition_id="example-4.3.5-deletepermission--TRANSITION--retract--published_private" after_script="" before_script="" trigger="USER">
<action category="workflow" icon="" url="%(content_url)s/content_status_modify?workflow_action=example-4.3.5-deletepermission--TRANSITION--retract--published_private">retract</action>
<guard>
<guard-role>Reviewer</guard-role>
<guard-role>Editor</guard-role>
</guard>
</transition>
<transition new_state="example-4.3.5--STATUS--pending" title="submit for publication" transition_id="example-4.3.5--TRANSITION--submit-for-publication--private_pending" after_script="" before_script="" trigger="USER">
<action category="workflow" icon="" url="%(content_url)s/content_status_modify?workflow_action=example-4.3.5--TRANSITION--submit-for-publication--private_pending">submit for publication</action>
<transition new_state="example-4.3.5-deletepermission--STATUS--pending" title="submit for publication" transition_id="example-4.3.5-deletepermission--TRANSITION--submit-for-publication--private_pending" after_script="" before_script="" trigger="USER">
<action category="workflow" icon="" url="%(content_url)s/content_status_modify?workflow_action=example-4.3.5-deletepermission--TRANSITION--submit-for-publication--private_pending">submit for publication</action>
<guard>
<guard-role>Editor</guard-role>
</guard>
Expand Down
@@ -0,0 +1 @@
result.xml

0 comments on commit b81ff7b

Please sign in to comment.