As we transition to the new Hyland Community, some post links may be temporarily disrupted as we finalize redirects. We apologize for the inconvenience and are working to resolve this as quickly as possible. Details.
<permissionSet type="st:site" expose="selected"> <permissionGroup name="SiteManager" allowFullControl="true" expose="true" /> <permissionGroup name="SiteCollaborator" allowFullControl="false" expose="true"> <includePermissionGroup permissionGroup="Collaborator" type="cm:cmobject" /> </permissionGroup> <permissionGroup name="SiteContributor" allowFullControl="false" expose="true"> <includePermissionGroup permissionGroup="Contributor" type="cm:cmobject" /> </permissionGroup> <permissionGroup name="SiteConsumer" allowFullControl="false" expose="true"> <includePermissionGroup permissionGroup="Consumer" type="cm:cmobject" /> <includePermissionGroup permissionGroup="ForumContributor" type="fm:forum" /> </permissionGroup> </permissionSet> <permissionSet type="fm:forum" expose="selected"> <permissionGroup name="ForumContributor" allowFullControl="false" expose="true"> <includePermissionGroup permissionGroup="Contributor" type="cm:cmobject" /> </permissionGroup> </permissionSet>
You know that if you create the site as public, anyone can just start a discussion and access the site functionality without joining the site first.
<permissionGroup name="Perm" allowFullControl="false" expose="false"> <includePermissionGroup permissionGroup="Read" type="sys:base" /> </permissionGroup> <permissionGroup name="Perm_ext" allowFullControl="false" expose="false"> <includePermissionGroup permissionGroup="Write" type="sys:base" /> </permissionGroup>
<globalPermission permission="Perm_ext" authority="ROLE_EXT" />
package org.alfresco.module.mymodule; import * /* you have to do it yourself */ public class GenericTypeBasedDynamicAuthority implements DynamicAuthority { private NodeService nodeService; private PermissionsDaoComponent permissionsDaoComponent; private AuthorityService authorityService; // Deduced values private PermissionReference basePermission; private List<QName> applicableTypes = new ArrayList<QName>(); private String authority; @Override public String getAuthority() { return authority; } @Override public boolean hasAuthority(NodeRef nodeRef, String userName) { AccessStatus state = hasBasePermission(nodeRef, userName); return (applicableTypes.contains(nodeService.getType(nodeRef)) && (state == AccessStatus.ALLOWED)); } @Override public Set<PermissionReference> requiredFor() { return null; } public void setNodeService(NodeService nodeService) { this.nodeService = nodeService; } public NodeService getNodeService() { return nodeService; } public void setPermissionsDaoComponent(PermissionsDaoComponent permissionsDaoComponent) { this.permissionsDaoComponent = permissionsDaoComponent; } public PermissionsDaoComponent getPermissionsDaoComponent() { return permissionsDaoComponent; } public void setAuthorityService(AuthorityService authorityService) { this.authorityService = authorityService; } public AuthorityService getAuthorityService() { return authorityService; } public void setAuthority(String authority) { this.authority = authority; } public void setTypes(List<String> types) { this.applicableTypes.clear(); for (String type : types) { this.applicableTypes.add(QName.createQName(MyModel.NAMESPACE, type)); } } public List<String> getTypes() { List<String> result = new ArrayList<String>(); for (QName qname : applicableTypes) { result.add(qname.getLocalName()); } return result; } public void setBaseRole(String role) { this.basePermission = SimplePermissionReference.getPermissionReference(ContentModel.TYPE_CMOBJECT, role); } public String getBaseRole() { return basePermission.getName(); } private AccessStatus hasBasePermission(NodeRef nodeRef, String userName) { NodePermissionEntry nodePermissions = permissionsDaoComponent.getPermissions(nodeRef); List<? extends PermissionEntry> permEntries = nodePermissions.getPermissionEntries(); Set<String> auths = getAuthorityService().getAuthorities(); auths.add(userName); for (PermissionEntry permEntry : permEntries) { if (permEntry.getPermissionReference().equals(basePermission) && auths.contains(permEntry.getAuthority()) && permEntry.getAccessStatus() == AccessStatus.ALLOWED) { return AccessStatus.ALLOWED; } } return AccessStatus.DENIED; } }
<bean id="permissionServiceImpl" class="org.alfresco.repo.security.permissions.impl.PermissionServiceImpl"> <property name="nodeService"> <ref bean="mtAwareNodeService" /> </property> <property name="tenantService"> <ref bean="tenantService"/> </property> <property name="dictionaryService"> <ref bean="dictionaryService" /> </property> <property name="permissionsDaoComponent"> <ref bean="permissionsDaoComponent" /> </property> <property name="modelDAO"> <ref bean="permissionsModelDAO" /> </property> <property name="authorityService"> <ref bean="authorityService" /> </property> <property name="accessCache"> <ref bean="permissionsAccessCache" /> </property> <property name="policyComponent"> <ref bean="policyComponent" /> </property> <property name="aclDaoComponent"> <ref bean="aclDaoComponent" /> </property> <property name="dynamicAuthorities"> <list> <ref bean="ownerDynamicAuthority" /> <ref bean="lockOwnerDynamicAuthority" /> <!– dynamic authorities for roles on types –> <ref bean="myDynamicAuthority" /> </list> </property> </bean> <bean id="myDynamicAuthority" class="org.alfresco.module.mymodule.GenericTypeBasedDynamicAuthority"> <property name="nodeService"> <ref bean="nodeService"/> </property> <property name="permissionsDaoComponent"> <ref bean="permissionsDaoComponent" /> </property> <property name="authorityService"> <ref bean="authorityService" /> </property> <property name="authority"> <value>ROLE_EXT</value> </property> <property name="baseRole"> <value>Perm</value> </property> <property name="types"> <list> <value>yourType</value> </list> </property> </bean>
<permissionGroup name="SolaScrittura" allowFullControl="false" expose="true" > <includePermissionGroup permissionGroup="Read" type="sys:base" /> <includePermissionGroup permissionGroup="CreateChildren" type="sys:base" /> </permissionGroup>
<!– ================================================ –> <!– Permissions available to all content and folders –> <!– ================================================ –>
<!– =============================== –> <!– Permissions specific to content –> <!– =============================== –>
<permissionSet type="cm:content" expose="selected"> <!– Content specific roles. –> <permissionGroup name="Coordinator" extends="true" expose="true"/> <permissionGroup name="Collaborator" extends="true" expose="true"/> <permissionGroup name="Contributor" extends="true" expose="true"/> <permissionGroup name="Editor" extends="true" expose="true"/> <permissionGroup name="Consumer" extends="true" expose="true"/> <permissionGroup name="RecordAdministrator" extends="true" expose="false"/> <permissionGroup name="SolaScrittura" extends="true" expose="true"/> </permissionSet> <permissionSet type="cm:folder" expose="selected"> <!– Content folder specific roles. –> <permissionGroup name="Coordinator" extends="true" expose="true"/> <permissionGroup name="Collaborator" extends="true" expose="true"/> <permissionGroup name="Contributor" extends="true" expose="true"/> <permissionGroup name="Editor" extends="true" expose="true"/> <permissionGroup name="Consumer" extends="true" expose="true"/> <permissionGroup name="RecordAdministrator" extends="true" expose="false"/> <permissionGroup name="SolaScrittura" extends="true" expose="true"/> </permissionSet>