Typical PnP Backend Configuration Points
While the Content Accelerator administration console provides powerful UI-based configurations, sometimes back end configurations are desired. Typical configuration points include:
Update the Change Request Form and Workflow
Form and workflow updates are made in the WizardAdmin application. See the Admin Guide for more information.
Extend Quality Document Type
Extend Quality Document Type (Before ACA version 3.5)
The default Quality Document object type is the out-of-the-box available controlled document type. If you wish to add additional properties or aspects to your Policy and Procedure solution, you can extend the quality document type using the following steps.
In a custom Alfresco AMP, define your custom Alfresco object model, then do the following:
- Extend the
aw:qualityDocument
type in your object model.
<type name="acme:document">
<title>Sample Document Type</title>
<parent>aw:qualityDocument</parent>
</type>
You can define whatever additional properties, aspects, associations etc that you wish on your custom object type.
-
You’ll need to import the
aw
namespace -<import uri="http://www.activewizard.com/model/content/1.0" prefix="aw" />
-
Update your dictionary import bean to depend on the
com.tsgrp.openContent.dictionaryBootstrap
bean, eg below:
<bean id="pnp-sample-extension-project.dictionaryBootstrap" parent="dictionaryModelBootstrap"
depends-on="dictionaryBootstrap,com.tsgrp.openContent.dictionaryBootstrap">
In addition to the above steps in your custom AMP, you’ll need to configure the opencontent-override-module-context.xml
to recognize your new custom type.
-
Define the
tsgQualityDocBehaviours
,tsgControlledDocVersionPolicies
, andpermissionsModel
beans in theopencontent-override-module-context.xml
. -
Add the
acme:document
object type to thevalidDoctypesForTSGVersionControl
property lists for the first three beans. -
Add the
acme:document
object type to thepermissionsModel
bean. -
Add the
acme:document
object type to theWizardQualityDocLifecycleApplicableTypes
bean in theopencontent-override-config.xml
.
For the three steps above, see the below for example configuration:
<!-- Behaviour to applied to Quality Documents in order to update aspects, tsg:status, and remove minor versions upon promotion. -->
<bean id="tsgQualityDocBehaviours" class="com.tsgrp.alfresco.behaviour.TSGQualityDocumentBehaviors" init-method="init" depends-on="com.tsgrp.openContent.dictionaryBootstrap,pnp-sample-extension-project.dictionaryBootstrap">
<property name="policyComponent" ref="policyComponent" />
<property name="serviceRegistry" ref="ServiceRegistry" />
<property name="behaviorFilter" ref="policyBehaviourFilter" />
<property name="newTSGControlledDocPermissionAspect" value="{http://www.tsgrp.com/model/tsg/1.0}qualityDraft" />
<property name="controlledDocOwnerName" value="admin" />
<property name="namespacePrefixResolver">
<ref bean="namespaceService" />
</property>
<property name="validDoctypesForTSGVersionControl">
<list>
<value>aw:psi</value>
<value>aw:controlledDocument</value>
<value>aw:qualityDocument</value>
<value>acme:document</value>
</list>
</property>
</bean>
<!-- Contains the version policy and related necessary behaviors to control document versioning schema -->
<bean id="tsgControlledDocVersionPolicies" class="com.tsgrp.alfresco.behaviour.ControlledDocumentVersionPolicy" init-method="init" depends-on="com.tsgrp.openContent.dictionaryBootstrap,pnp-sample-extension-project.dictionaryBootstrap">
<property name="policyComponent" ref="policyComponent" />
<property name="serviceRegistry" ref="ServiceRegistry" />
<property name="behaviorFilter" ref="policyBehaviourFilter" />
<property name="namespacePrefixResolver">
<ref bean="namespaceService" />
</property>
<property name="validDoctypesForTSGVersionControl">
<list>
<value>aw:psi</value>
<value>aw:qualityDocument</value>
<value>aw:controlledDocument</value>
<value>acme:document</value>
</list>
</property>
</bean>
<util:map id="permissionsModel">
<entry key="aw:qualityDocument" value-ref="permissions_aw_quality_document"/>
<entry key="aw:controlledDocument" value-ref="permissions_aw_controlled_document"/>
<entry key="aw:psi" value-ref="permissions_aw_psi"/>
<entry key="acme:document" value-ref="permissions_aw_quality_document"/>
</util:map>
<bean id="WizardQualityDocLifecycleApplicableTypes" class="java.util.ArrayList" >
<constructor-arg index="0">
<list>
<value>Quality Document</value>
<value>aw_legacyQualityDocument</value>
<value>acme_document</value>
</list>
</constructor-arg>
</bean>
Extend Quality Document Type (ACA version 3.5 and above)
The default Quality Document object type is the out-of-the-box available controlled document type. If you wish to add additional properties or aspects to your Policy and Procedure solution, you can extend the quality document type using the following steps.
In a custom Alfresco AMP (see what is expected of a custom ACA AMP and how to set it up properly), define your custom Alfresco object model, then do the following:
- Extend the
aw:qualityDocument
type in your object model.
<type name="acme:document">
<title>Sample Document Type</title>
<parent>aw:qualityDocument</parent>
</type>
You can define whatever additional properties, aspects, associations etc that you wish on your custom object type.
-
You’ll need to import the
aw
namespace -<import uri="http://www.activewizard.com/model/content/1.0" prefix="aw" />
-
In the custom Amps module-context, override the
com.tsgrp.openContent.dictionaryBootstrap
bean and add your custom model here
Next in your custom amps opencontent-extension-override-module-ctx.xml file
-
Define the
tsgQualityDocBehaviours
,tsgControlledDocVersionPolicies
, andpermissionsModel
beans. -
Add the
acme:document
object type to thevalidDoctypesForTSGVersionControl
property lists for the first three beans. -
Add the
acme:document
object type to thepermissionsModel
bean. -
Add the
acme:document
object type to theWizardQualityDocLifecycleApplicableTypes
bean in theopencontent-extension-override-config.xml
.
For the three steps above, see the below for example configuration:
<!-- Behaviour to applied to Quality Documents in order to update aspects, tsg:status, and remove minor versions upon promotion. -->
<bean id="tsgQualityDocBehaviours" class="com.tsgrp.alfresco.behaviour.TSGQualityDocumentBehaviors" init-method="init" depends-on="com.tsgrp.openContent.dictionaryBootstrap">
<property name="policyComponent" ref="policyComponent" />
<property name="serviceRegistry" ref="ServiceRegistry" />
<property name="behaviorFilter" ref="policyBehaviourFilter" />
<property name="newTSGControlledDocPermissionAspect" value="{http://www.tsgrp.com/model/tsg/1.0}qualityDraft" />
<property name="controlledDocOwnerName" value="admin" />
<property name="namespacePrefixResolver">
<ref bean="namespaceService" />
</property>
<property name="validDoctypesForTSGVersionControl">
<list>
<value>aw:psi</value>
<value>aw:controlledDocument</value>
<value>aw:qualityDocument</value>
<value>acme:document</value>
</list>
</property>
</bean>
<!-- Contains the version policy and related necessary behaviors to control document versioning schema -->
<bean id="tsgControlledDocVersionPolicies" class="com.tsgrp.alfresco.behaviour.ControlledDocumentVersionPolicy" init-method="init" depends-on="com.tsgrp.openContent.dictionaryBootstrap">
<property name="policyComponent" ref="policyComponent" />
<property name="serviceRegistry" ref="ServiceRegistry" />
<property name="behaviorFilter" ref="policyBehaviourFilter" />
<property name="namespacePrefixResolver">
<ref bean="namespaceService" />
</property>
<property name="validDoctypesForTSGVersionControl">
<list>
<value>aw:psi</value>
<value>aw:qualityDocument</value>
<value>aw:controlledDocument</value>
<value>acme:document</value>
</list>
</property>
</bean>
<util:map id="permissionsModel">
<entry key="aw:qualityDocument" value-ref="permissions_aw_quality_document"/>
<entry key="aw:controlledDocument" value-ref="permissions_aw_controlled_document"/>
<entry key="aw:psi" value-ref="permissions_aw_psi"/>
<entry key="acme:document" value-ref="permissions_aw_quality_document"/>
</util:map>
<bean id="WizardQualityDocLifecycleApplicableTypes" class="java.util.ArrayList" >
<constructor-arg index="0">
<list>
<value>Quality Document</value>
<value>aw_legacyQualityDocument</value>
<value>acme_document</value>
</list>
</constructor-arg>
</bean>
Extend AW PSI Type
The default Page Set Instance object type is the out-of-the-box available type for documents created via wizard form. If you wish to add additional properties or aspects to the ootb PSI for the Policy and Procedure solution, you can extend the aw:psi type using the following steps.
In a custom Alfresco AMP ( See on what is expected of a custom ACA AMP and how to set it up properly), setup a custom Alfresco object model, then do the following:
-
Extend the
aw:psi
type in your object model. Example:<type name="hy:psi"> <title>Sample Page Set Instance Type</title> <parent>aw:psi</parent> </type>
You can define whatever additional properties, aspects, associations etc that you wish on your custom object type.
You’ll need to import the
aw
namespace -<import uri="http://www.activewizard.com/model/content/1.0" prefix="aw" />
-
In your custom amps
opencontent-extension-override-module-ctx.xml
, define thetsgQualityDocBehaviours
andtsgControlledDocVersionPolicies
beans and add your custom object type to thevalidDoctypesForTSGVersionControl
property list for each bean. Example:<!-- Behaviour to applied to Quality Documents in order to update aspects, tsg:status, and remove minor versions upon promotion. --> <bean id="tsgQualityDocBehaviours" class="com.tsgrp.alfresco.behaviour.TSGQualityDocumentBehaviors" init-method="init" depends-on="com.tsgrp.openContent.dictionaryBootstrap"> <property name="policyComponent" ref="policyComponent" /> <property name="serviceRegistry" ref="ServiceRegistry" /> <property name="behaviorFilter" ref="policyBehaviourFilter" /> <property name="newTSGControlledDocPermissionAspect" value="{http://www.tsgrp.com/model/tsg/1.0}qualityDraft" /> <property name="controlledDocOwnerName" value="admin" /> <property name="namespacePrefixResolver"> <ref bean="namespaceService" /> </property> <property name="validDoctypesForTSGVersionControl"> <list> <value>aw:psi</value> <value>aw:controlledDocument</value> <value>aw:qualityDocument</value> <value>hy:psi</value> </list> </property> </bean> <!-- Contains the version policy and related necessary behaviors to control document versioning schema --> <bean id="tsgControlledDocVersionPolicies" class="com.tsgrp.alfresco.behaviour.ControlledDocumentVersionPolicy" init-method="init" depends-on="com.tsgrp.openContent.dictionaryBootstrap"> <property name="policyComponent" ref="policyComponent" /> <property name="serviceRegistry" ref="ServiceRegistry" /> <property name="behaviorFilter" ref="policyBehaviourFilter" /> <property name="namespacePrefixResolver"> <ref bean="namespaceService" /> </property> <property name="validDoctypesForTSGVersionControl"> <list> <value>aw:psi</value> <value>aw:qualityDocument</value> <value>aw:controlledDocument</value> <value>hy:psi</value> </list> </property> </bean>
-
In your custom amps
opencontent-extension-override-module-ctx.xml
, define thepermissionsModel
bean and add your custom type to the bean. Example:<util:map id="permissionsModel"> <entry key="aw:qualityDocument" value-ref="permissions_aw_quality_document"/> <entry key="aw:controlledDocument" value-ref="permissions_aw_controlled_document"/> <entry key="aw:psi" value-ref="permissions_aw_psi"/> <entry key="hy:psi" value-ref="permissions_aw_quality_document"/> </util:map>
-
In the
opencontent-extension-override-config.xml
add your custom type to theWizardFormLifecycleApplicableTypes
list bean. Example:<!-- Override this bean to enable different types to be subject to the WizardFormLifecycle. --> <bean id="WizardFormLifecycleApplicableTypes" class="java.util.ArrayList" > <constructor-arg index="0"> <list> <value>Page Set Instance</value> <value>simple_cr</value> <value>hy_psi</value> </list> </constructor-arg> </bean>
-
Once the updates to the custom AMP have been deployed, you can now add your custom type to the Object Type Config in the ACA admin. Locate the Object Type Config in the ACA Admin interface, click Add Type, and select your new object type from the list (ex:
hy_psi
). Once selected, change thecontainer
toWizard
. Save the config. -
You can now use this type as the Instance type for a wizard form. Login to the Wizard Admin interface. Create a new form. You will be prompted for an Instance Type. Select your new type.
You can find additional information on configuring Active Wizard forms
Modify Default Security Settings
The Policy and Procedure solution includes a dynamic security model that allows documents to be secured independently based on lifecycle state. To override the existing security settings, override the following beans in the opencontent-override-module-context.xml
(or the opencontent-extension-override-module-ctx.xml
if using ACA 3.5 and above). This example extends the above acme:document
example of a custom object type extending the tsg:qualityDocument
object type, so please follow those steps above first.
- Update the
permissionsModel
bean with a new value ref for theacme:document
type (egpermissions_acme_document
in the below example)
<util:map id="permissionsModel">
<entry key="aw:qualityDocument" value-ref="permissions_aw_quality_document"/>
<entry key="aw:controlledDocument" value-ref="permissions_aw_controlled_document"/>
<entry key="aw:psi" value-ref="permissions_aw_psi"/>
<entry key="acme:document" value-ref="permissions_acme_document"/>
</util:map>
- Create a
permissions_acme_document
bean and update its value refs to point to new permission sets, as needed. If we want the subtype to simply follow the exact permissions as the out of the box parent, simply set the permissions model to the existing permissions, likelypermissions_aw_quality_document
for document subtypes andpermissions_aw_psi
for subtypes. However, if we want to make changes for our subtype, see the below example where the Superseded permissions are changed for a document subtype.
Original permission set:
<util:map id="permissions_acme_document">
<!-- quality doc security -->
<entry key="${wizard.lifecycle.repoNames.qualityDraftDocState}" value-ref="controlledDocDraftPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityInReviewDocState}" value-ref="controlledDocInReviewPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityPendingApprovalDocState}" value-ref="controlledDocPendingApprovalPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityApprovedDocState}" value-ref="controlledDocApprovedPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityEffectiveDocState}" value-ref="controlledDocEffectivePermissions" />
<entry key="${wizard.lifecycle.repoNames.qualitySupersededDocState}" value-ref="controlledDocSupersededPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityObsoleteDocState}" value-ref="controlledDocObsoletePermissions" />
<entry key="{http://www.tsgrp.com/model/openannotate/1.0}unredacted" value-ref="unredactedPermissions" />
</util:map>
Updated permission set
<util:map id="permissions_acme_document">
<!-- quality doc security -->
<entry key="${wizard.lifecycle.repoNames.qualityDraftDocState}" value-ref="controlledDocDraftPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityInReviewDocState}" value-ref="controlledDocInReviewPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityPendingApprovalDocState}" value-ref="controlledDocPendingApprovalPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityApprovedDocState}" value-ref="controlledDocApprovedPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityEffectiveDocState}" value-ref="controlledDocEffectivePermissions" />
<entry key="${wizard.lifecycle.repoNames.qualitySupersededDocState}" value-ref="acmeCustomSupersededPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityObsoleteDocState}" value-ref="controlledDocObsoletePermissions" />
<entry key="{http://www.tsgrp.com/model/openannotate/1.0}unredacted" value-ref="unredactedPermissions" />
</util:map>
- Lastly define the new custom permission.
Original permission setting
<util:map id="controlledDocSupersededPermissions">
<entry key="GROUP_wizard_administrators" value="controlled_doc_superseded" />
<!-- does NOT give wizard_contributors any access -->
</util:map>
Customized permission setting
<util:map id="acmeCustomSupersededPermissions">
<entry key="GROUP_wizard_administrators" value="controlled_doc_superseded" />
<!-- does NOT give wizard_contributors any access -->
<entry key="GROUP_acme_superseded_viewers" value="controlled_doc_superseded" />
</util:map>
A full reference of the permission sets granted is listed here:
ocPermissionDefinitions.xml
<permissions>
<!-- Namespaces used in type references -->
<namespaces>
<namespace uri="http://www.alfresco.org/model/system/1.0" prefix="sys"/>
<namespace uri="http://www.alfresco.org/model/content/1.0" prefix="cm"/>
<namespace uri="http://www.alfresco.org/model/wcmmodel/1.0" prefix="wcm"/>
<namespace uri="http://www.alfresco.org/model/wcmappmodel/1.0" prefix="wca"/>
<namespace uri="http://www.activewizard.com/model/content/1.0" prefix="aw" />
<namespace uri="http://www.tsgrp.com/model/openannotate/1.0" prefix="oa" />
</namespaces>
<!-- aw:doc permissions for forms and other aw docs -->
<permissionSet type="aw:doc" expose="selected">
<permissionGroup name="wizard_form_draft" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="Write"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
<includePermissionGroup type="cm:lockable" permissionGroup="CheckOut" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CheckIn" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CancelCheckOut" />
</permissionGroup>
<permissionGroup name="wizard_form_in_review" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
<includePermissionGroup type="cm:lockable" permissionGroup="CheckOut" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CheckIn" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CancelCheckOut" />
</permissionGroup>
<permissionGroup name="wizard_form_in_review_edit" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="Write"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
<includePermissionGroup type="cm:lockable" permissionGroup="CheckOut" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CheckIn" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CancelCheckOut" />
</permissionGroup>
<permissionGroup name="wizard_form_pending_approval" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
</permissionGroup>
<permissionGroup name="wizard_form_pending_approval_edit" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="Write"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
<includePermissionGroup type="cm:lockable" permissionGroup="CheckOut" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CheckIn" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CancelCheckOut" />
</permissionGroup>
<permissionGroup name="wizard_form_approved" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
</permissionGroup>
<permissionGroup name="wizard_form_closed" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
</permissionGroup>
<permissionGroup name="wizard_form_cancelled" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
</permissionGroup>
<permissionGroup name="wizard_form_cancelled_relate" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
</permissionGroup>
</permissionSet>
<!-- permissions for controlled docs in the system -->
<permissionSet type="cm:content" expose="selected">
<permissionGroup name="controlled_doc_draft" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="Write"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
<includePermissionGroup type="cm:lockable" permissionGroup="CheckOut" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CheckIn" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CancelCheckOut" />
</permissionGroup>
<permissionGroup name="controlled_doc_draft_readonly" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
</permissionGroup>
<permissionGroup name="controlled_doc_draft_delete" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="Write"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
<includePermissionGroup type="sys:base" permissionGroup="Delete" />
<includePermissionGroup type="cm:lockable" permissionGroup="CheckOut" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CheckIn" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CancelCheckOut" />
</permissionGroup>
<permissionGroup name="controlled_doc_in_review" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
</permissionGroup>
<permissionGroup name="controlled_doc_in_review_edit" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="Write"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
<includePermissionGroup type="cm:lockable" permissionGroup="CheckOut" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CheckIn" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CancelCheckOut" />
</permissionGroup>
<permissionGroup name="controlled_doc_pending_approval" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
</permissionGroup>
<permissionGroup name="controlled_doc_pending_approval_edit" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="Write"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
<includePermissionGroup type="cm:lockable" permissionGroup="CheckOut" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CheckIn" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CancelCheckOut" />
</permissionGroup>
<permissionGroup name="controlled_doc_approved" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
</permissionGroup>
<permissionGroup name="controlled_doc_approved_edit" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="Write"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
<includePermissionGroup type="cm:lockable" permissionGroup="CheckOut" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CheckIn" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CancelCheckOut" />
</permissionGroup>
<permissionGroup name="controlled_doc_effective" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
</permissionGroup>
<permissionGroup name="controlled_doc_effective_edit" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="Write"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
<includePermissionGroup type="cm:lockable" permissionGroup="CheckOut" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CheckIn" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CancelCheckOut" />
</permissionGroup>
<permissionGroup name="controlled_doc_superseded" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
</permissionGroup>
<!-- For clients who want to expose superseded documents for property edit.
Note that actually versioning a superseded document _will fail_. Care must be made
in the calling application to only allow property edit, not document editing. -->
<permissionGroup name="controlled_doc_superseded_edit" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="Write"/>
</permissionGroup>
<permissionGroup name="controlled_doc_obsolete" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
</permissionGroup>
</permissionSet>
<!-- oa:unredacted permissions for the original versions of redacted content -->
<permissionSet type="oa:unredacted" expose="selected">
<permissionGroup name="redaction_admin" expose="false">
<includePermissionGroup type="sys:base" permissionGroup="Read"/>
<includePermissionGroup type="sys:base" permissionGroup="Write"/>
<includePermissionGroup type="sys:base" permissionGroup="AddChildren" />
<includePermissionGroup type="cm:lockable" permissionGroup="CheckOut" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CheckIn" />
<includePermissionGroup type="cm:workingcopy" permissionGroup="CancelCheckOut" />
</permissionGroup>
</permissionSet>
</permissions>
<util:map id="permissionsModel">
<entry key="aw:qualityDocument" value-ref="permissions_aw_quality_document"/>
<entry key="aw:controlledDocument" value-ref="permissions_aw_controlled_document"/>
<entry key="aw:psi" value-ref="permissions_aw_psi"/>
</util:map>
<util:map id="permissions_aw_quality_document">
<!-- quality doc security -->
<entry key="${wizard.lifecycle.repoNames.qualityDraftDocState}" value-ref="controlledDocDraftPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityInReviewDocState}" value-ref="controlledDocInReviewPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityPendingApprovalDocState}" value-ref="controlledDocPendingApprovalPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityApprovedDocState}" value-ref="controlledDocApprovedPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityEffectiveDocState}" value-ref="controlledDocEffectivePermissions" />
<entry key="${wizard.lifecycle.repoNames.qualitySupersededDocState}" value-ref="controlledDocSupersededPermissions" />
<entry key="${wizard.lifecycle.repoNames.qualityObsoleteDocState}" value-ref="controlledDocObsoletePermissions" />
<entry key="{http://www.tsgrp.com/model/openannotate/1.0}unredacted" value-ref="unredactedPermissions" />
</util:map>
<util:map id="permissions_aw_controlled_document">
<!-- controlled doc security -->
<entry key="${wizard.lifecycle.repoNames.draftControlledDocState}" value-ref="controlledDocDraftPermissions" />
<entry key="${wizard.lifecycle.repoNames.inReviewControlledDocState}" value-ref="controlledDocInReviewPermissions" />
<entry key="${wizard.lifecycle.repoNames.pendingApprovalControlledDocState}" value-ref="controlledDocPendingApprovalPermissions" />
<entry key="${wizard.lifecycle.repoNames.approvedControlledDocState}" value-ref="controlledDocApprovedPermissions" />
<entry key="${wizard.lifecycle.repoNames.effectiveControlledDocState}" value-ref="controlledDocEffectivePermissions" />
<entry key="${wizard.lifecycle.repoNames.supersededControlledDocState}" value-ref="controlledDocSupersededPermissions" />
<entry key="${wizard.lifecycle.repoNames.obsoleteControlledDocState}" value-ref="controlledDocObsoletePermissions" />
<!-- redaction security -->
<entry key="{http://www.tsgrp.com/model/openannotate/1.0}unredacted" value-ref="unredactedPermissions" />
</util:map>
<util:map id="permissions_aw_psi">
<!-- form security -->
<entry key="${wizard.lifecycle.repoNames.draftFormState}" value-ref="wizardFormDraftPermissions" />
<entry key="${wizard.lifecycle.repoNames.inReviewFormState}" value-ref="wizardFormInReviewPermissions" />
<entry key="${wizard.lifecycle.repoNames.pendingApprovalFormState}" value-ref="wizardFormPendingApprovalPermissions" />
<entry key="${wizard.lifecycle.repoNames.approvedFormState}" value-ref="wizardFormApprovedPermissions" />
<entry key="${wizard.lifecycle.repoNames.closedFormState}" value-ref="wizardFormClosedPermissions" />
<entry key="${wizard.lifecycle.repoNames.cancelledFormState}" value-ref="wizardFormCancelledPermissions" />
<!-- redaction security -->
<entry key="{http://www.tsgrp.com/model/openannotate/1.0}unredacted" value-ref="unredactedPermissions" />
</util:map>
<!-- individual FORM draft, inReview, pendingApproval, approved, and closed permissions maps keyed by the group name -->
<util:map id="wizardFormDraftPermissions">
<entry key="GROUP_wizard_contributors" value="wizard_form_draft" />
</util:map>
<util:map id="wizardFormInReviewPermissions">
<entry key="GROUP_wizard_contributors" value="wizard_form_in_review" />
</util:map>
<util:map id="wizardFormPendingApprovalPermissions">
<entry key="GROUP_wizard_contributors" value="wizard_form_pending_approval" />
</util:map>
<util:map id="wizardFormApprovedPermissions">
<entry key="GROUP_wizard_contributors" value="wizard_form_approved" />
<!-- All users should be able to view approved forms. -->
<entry key="GROUP_EVERYONE" value="wizard_form_approved" />
</util:map>
<util:map id="wizardFormClosedPermissions">
<entry key="GROUP_EVERYONE" value="wizard_form_closed" />
</util:map>
<util:map id="wizardFormCancelledPermissions">
<entry key="GROUP_EVERYONE" value="wizard_form_cancelled" />
<entry key="GROUP_wizard_contributors" value="wizard_form_cancelled_relate" />
</util:map>
<!-- individual CONTROLLED DOC draft, inReview, pendingApproval, approved, and effective, superseded permissions maps keyed by the group name -->
<util:map id="controlledDocDraftPermissions">
<entry key="GROUP_wizard_contributors" value="controlled_doc_draft" />
<entry key="GROUP_wizard_doc_editors" value="controlled_doc_draft" />
</util:map>
<util:map id="controlledDocInReviewPermissions">
<entry key="GROUP_wizard_contributors" value="controlled_doc_in_review" />
<entry key="GROUP_wizard_doc_editors" value="controlled_doc_in_review" />
</util:map>
<util:map id="controlledDocPendingApprovalPermissions">
<entry key="GROUP_wizard_contributors" value="controlled_doc_pending_approval" />
<entry key="GROUP_wizard_doc_editors" value="controlled_doc_pending_approval" />
</util:map>
<util:map id="controlledDocApprovedPermissions">
<!-- core gives ONLY wizard_administrators and wizard_doc_editors the ability to version approved documents -->
<entry key="GROUP_wizard_contributors" value="controlled_doc_approved" />
<entry key="GROUP_wizard_administrators" value="controlled_doc_approved_edit" /><!-- to be able to set effective date -->
<entry key="GROUP_wizard_doc_editors" value="controlled_doc_approved_edit" /><!-- to be able to set effective date -->
<entry key="GROUP_EVERYONE" value="controlled_doc_approved" />
</util:map>
<!-- core gives ONLY wizard_administrators and wizard_doc_editors the ability to version effective documents -->
<util:map id="controlledDocEffectivePermissions">
<entry key="GROUP_wizard_contributors" value="controlled_doc_effective" />
<entry key="GROUP_wizard_administrators" value="controlled_doc_effective_edit" />
<entry key="GROUP_wizard_doc_editors" value="controlled_doc_effective_edit" /><!-- to be able to set effective date -->
<entry key="GROUP_EVERYONE" value="controlled_doc_effective" />
</util:map>
<util:map id="controlledDocSupersededPermissions">
<entry key="GROUP_wizard_administrators" value="controlled_doc_superseded" />
<!-- does NOT give wizard_contributors any access -->
</util:map>
<util:map id="controlledDocObsoletePermissions">
<entry key="GROUP_wizard_administrators" value="controlled_doc_obsolete" />
<!-- does NOT give wizard_contributors any access -->
</util:map>
If you wish to define your own custom permissionSets and permissionGroups, see Permissions and roles Extension Point for more information.
Once a custom permissionSet is defined and enabled via your custom AMP, it can be referenced in the customized ACA permission configuration.
Modify Only Properties
In some cases, you may only want to override some of the default properties of the pnp accelerator. You do not need an entire custom AMP to do this. Instead you can create the file opencontent-override-placeholders.properties
on the /alfresco classpath, for example, tomcat/shared/classes/alfresco/module/com.tsgrp.opencontent
and put the overridden properties in this file.
Two things to note with this:
-
This file will win out on any other property files, even ones in the custom amp. For this reason, if you are using a custom amp, it is better to override the properties in the AMP than this file
-
You will likely need to create the
module/com.tsgrp.opencontent/
folders