<?xml version="1.0" encoding="UTF-8"?>
<rss xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:taxo="http://purl.org/rss/1.0/modules/taxonomy/" version="2.0">
  <channel>
    <title>topic How to make a process available just to a certain group of users? in Alfresco Forum</title>
    <link>https://connect.hyland.com/t5/alfresco-forum/how-to-make-a-process-available-just-to-a-certain-group-of-users/m-p/34904#M14741</link>
    <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Hi guys,&lt;/P&gt;&lt;P&gt;do you know if there is a way, in Activiti, to can make a process available just to a certain group of users?&lt;/P&gt;&lt;P&gt;For instance, we would like that only the "managers" could start an "Expense approval request" process.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;Thanks&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
    <pubDate>Thu, 23 Mar 2017 15:55:41 GMT</pubDate>
    <dc:creator>kobe</dc:creator>
    <dc:date>2017-03-23T15:55:41Z</dc:date>
    <item>
      <title>How to make a process available just to a certain group of users?</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/how-to-make-a-process-available-just-to-a-certain-group-of-users/m-p/34904#M14741</link>
      <description>Hi guys,do you know if there is a way, in Activiti, to can make a process available just to a certain group of users?For instance, we would like that only the "managers" could start an "Expense approval request" process.Thanks</description>
      <pubDate>Thu, 23 Mar 2017 15:55:41 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/how-to-make-a-process-available-just-to-a-certain-group-of-users/m-p/34904#M14741</guid>
      <dc:creator>kobe</dc:creator>
      <dc:date>2017-03-23T15:55:41Z</dc:date>
    </item>
    <item>
      <title>Re: How to make a process available just to a certain group of users?</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/how-to-make-a-process-available-just-to-a-certain-group-of-users/m-p/34905#M14742</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;Kobe_,&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;This has been discussed &lt;A _jive_internal="true" href="https://community.alfresco.com/thread/223327-how-to-hide-deployed-processes-from-specific-users" rel="nofollow noopener noreferrer"&gt;once before&lt;/A&gt; on the Activiti forums. Please take a look at their findings for reference, and see if that gets you going in the right direction.&lt;BR /&gt;&lt;BR /&gt;-JEarles&lt;BR /&gt;&lt;A href="https://migration33.stage.lithium.com/t5/tag/bp3/tg-p"&gt;&lt;/A&gt;&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Thu, 23 Mar 2017 17:47:21 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/how-to-make-a-process-available-just-to-a-certain-group-of-users/m-p/34905#M14742</guid>
      <dc:creator>jearles</dc:creator>
      <dc:date>2017-03-23T17:47:21Z</dc:date>
    </item>
    <item>
      <title>Re: How to make a process available just to a certain group of users?</title>
      <link>https://connect.hyland.com/t5/alfresco-forum/how-to-make-a-process-available-just-to-a-certain-group-of-users/m-p/34906#M14743</link>
      <description>&lt;HTML&gt;&lt;HEAD&gt;&lt;/HEAD&gt;&lt;BODY&gt;&lt;P&gt;I think that, thanks to Jonathan, we solved the issue.&lt;/P&gt;&lt;P&gt;We modified the class&amp;nbsp;ProcessDefinitionListQuery and recompiled the jar activiti-explorer-5.22.0.jar.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;I post here is the new code for the class ProcessDefinitionListQuery just in case someone needs it.&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;package org.activiti.explorer.ui.process;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;import java.util.ArrayList;&lt;BR /&gt;import java.util.List;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;import org.activiti.engine.RepositoryService;&lt;BR /&gt;import org.activiti.engine.identity.Group;&lt;BR /&gt;import org.activiti.engine.repository.ProcessDefinition;&lt;BR /&gt;import org.activiti.engine.repository.ProcessDefinitionQuery;&lt;BR /&gt;import org.activiti.engine.task.IdentityLink;&lt;BR /&gt;import org.activiti.explorer.ExplorerApp;&lt;BR /&gt;import org.activiti.explorer.data.AbstractLazyLoadingQuery;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;import com.vaadin.data.Item;&lt;BR /&gt;import com.vaadin.data.util.PropertysetItem;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&lt;BR /&gt;public class ProcessDefinitionListQuery extends AbstractLazyLoadingQuery {&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; protected transient RepositoryService repositoryService;&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; protected ProcessDefinitionFilter filter;&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; public ProcessDefinitionListQuery(RepositoryService repositoryService, ProcessDefinitionFilter filter) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.repositoryService = repositoryService;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; this.filter = filter;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; // we modified that method&lt;BR /&gt;&amp;nbsp; public List&amp;lt;Item&amp;gt; loadItems(int start, int count) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;ProcessDefinition&amp;gt; processDefinitions = filter.getQuery(repositoryService).listPage(start, count);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;Item&amp;gt; items = new ArrayList&amp;lt;Item&amp;gt;();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; for (ProcessDefinition processDefinition : processDefinitions) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;boolean display=isVisibileToUser(processDefinition);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(display){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;items.add(filter.createItem(processDefinition));&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return items;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; // Method added&lt;BR /&gt;&amp;nbsp; private boolean isVisibileToUser(ProcessDefinition processDefinition) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// TODO Auto-generated method stub&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp; boolean display= false;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if(!ExplorerApp.get().getLoggedInUser().isAdmin()){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;List&amp;lt;Group&amp;gt; userGroups = ExplorerApp.get().getLoggedInUser().getGroups();&lt;BR /&gt;&amp;nbsp; &amp;nbsp;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;IdentityLink&amp;gt; candidateGroups = repositoryService.getIdentityLinksForProcessDefinition(processDefinition.getId()); &lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; for(int k=0;userGroups!=null &amp;amp;&amp;amp; k&amp;lt;userGroups.size();k++){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;Group usrGrp=userGroups.get(k);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;for(int n=0; candidateGroups!=null &amp;amp;&amp;amp; n&amp;lt;candidateGroups.size();n++){&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;IdentityLink allowGrp=candidateGroups.get(n);&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(allowGrp.getGroupId().equalsIgnoreCase(usrGrp.getId()) || allowGrp.getGroupId()==null || allowGrp.getGroupId().length()==0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; display=true;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;}&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;// if no Candidate group is provided for that process, we show it to all the users&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;if(candidateGroups==null || candidateGroups.size()==0)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;display=true;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; else&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;display=true;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return display;&lt;BR /&gt;}&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;// we modified that method&lt;BR /&gt;public Item loadSingleResult(String id) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; ProcessDefinition definition = repositoryService.createProcessDefinitionQuery().processDefinitionId(id).singleResult();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (definition != null &amp;amp;&amp;amp; isVisibileToUser(definition)) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return filter.createItem(definition);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return null;&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; public int size() {&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// we modified that method&lt;BR /&gt;&amp;nbsp;&amp;nbsp; &amp;nbsp;// is not that efficent but for our small environment (less than 50 processes deployed) it works&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; List&amp;lt;Item&amp;gt; totale = this.loadItems(0,10000);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; return (int) totale.size();&lt;BR /&gt;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; public void setSorting(Object[] propertyId, boolean[] ascending) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; throw new UnsupportedOperationException();&lt;BR /&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;&amp;nbsp; public static class ProcessDefinitionListItem extends PropertysetItem implements Comparable&amp;lt;ProcessDefinitionListItem&amp;gt;{&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; private static final long serialVersionUID = 1L;&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; public int compareTo(ProcessDefinitionListItem other) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // process definitions are ordered by name (see #loadItems in query)&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String name = (String) getItemProperty("name").getValue();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String otherName = (String) other.getItemProperty("name").getValue();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; int comparison = name.compareTo(otherName);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // Name is not unique for process definition&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; // But the list is sorted on process definition key also, so we can use it to compare if the name is equal&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; if (comparison != 0) {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return comparison;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; } else {&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String key = (String) getItemProperty("key").getValue();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; String otherKey = (String) other.getItemProperty("key").getValue();&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; return key.compareTo(otherKey);&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp; &amp;nbsp;&lt;BR /&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp; }&lt;/P&gt;&lt;P&gt;&lt;/P&gt;&lt;P&gt;&amp;nbsp; }&lt;BR /&gt;&amp;nbsp; &lt;BR /&gt;}&lt;/P&gt;&lt;/BODY&gt;&lt;/HTML&gt;</description>
      <pubDate>Sat, 25 Mar 2017 11:16:24 GMT</pubDate>
      <guid>https://connect.hyland.com/t5/alfresco-forum/how-to-make-a-process-available-just-to-a-certain-group-of-users/m-p/34906#M14743</guid>
      <dc:creator>kobe</dc:creator>
      <dc:date>2017-03-25T11:16:24Z</dc:date>
    </item>
  </channel>
</rss>

