alfresco: limiting authority.ftl to a group of users

我是研究僧i 提交于 2019-12-09 21:29:23

问题


In my workflow model I have an association to cm:person type, in share configuration I'm using the authority.ftl template to display it, how can I limit the available users to select from down to the members of one group ?


回答1:


There s a few changes that I needed to do in order to achieve this:

  • You should pass a parameter to your authority.ftl in your share modules config file using a new control param:

     <config evaluator="node-type" condition="my:customtype">
       <forms>
        <form>
          <appearance>
            <field id="my:personproperty">
              <control template="/org/alfresco/components/form/controls/authority.ftl">
                <control-param name="filterString">mygroupname</control-param>
              </control>
    
  • In alfresco\web-extension\site-webscripts\org\alfresco\components\form\controls\authority.ftl, pass this param to the js picker:

 picker.setOptions(
{
  itemType: "${field.endpointType}",
  <#if field.control.params.filterString??>
    filterString: "${field.control.params.filterString}",
  </#if>  
  multipleSelectMode: ${field.endpointMany?string},
  itemFamily: "authority"
 });
  • In alfresco\extension\templates\webscripts\org\alfresco\repository\forms\pickerchildren.get.js read and use the parameter to query in only the given group:
  argsFilterString = args['filterString']
  ...
  if (argsSelectableType == "cm:person")
     {
        findUsers(argsSearchTerm, argsFilterString, maxResults, results);
     }
  ...
   function findUsers(searchTerm, filterString, maxResults, results){
   var paging = utils.createPaging(maxResults, -1);
   var searchResults = groups.searchUsers(searchTerm, paging, "lastName");
   var groupmembers = null;
   if (filterString != null){
       var group = groups.getGroup(filterString);
       var groupmembers = group.getAllUsers();     
   }
   // create person object for each result
   for each(var user in searchResults)
   {
  if (logger.isLoggingEnabled())
     logger.log("found user = " + user.userName);      
  var add=true;      
  if (groupmembers != null ){
     var ismember = false;
     for each (var p in groupmembers){
         if (""+p.userName == ""+user.userName){//need to add +"" cause they are java strings!
             ismember = true;
         }
     } 
     if (!ismember){
         logger.log(user.userName+" is no member of group "+filterString);
         add=false;              
     } 
  }      
  if(add){
      // add to results
      results.push(
      {
         item: createPersonResult(user.person),
         selectable: true 
      });
  }
 }
 }



回答2:


You can create a new control based on that authority.ftl and authority-finder.js, in which you modify the webscript call to a limited number of users to be returned !

Note : If the webscript doesnot support maxItems parameter (or any other parameter to limit the number of results returned), you can always create your brand new webscript that supports that feature and then point your new control at it.



来源:https://stackoverflow.com/questions/34856540/alfresco-limiting-authority-ftl-to-a-group-of-users

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!