alfresco:将authority.ftl限制为一组用户

时间:2016-01-18 14:00:14

标签: alfresco alfresco-share

在我的工作流模型中,我有一个与cm:person类型的关联,在共享配置中我正在使用authority.ftl模板来显示它,如何限制可用用户从一个组的成员中选择?

2 个答案:

答案 0 :(得分:2)

为了达到这个目的,我需要做一些改变:

  • 您应该使用新的控制参数将参数传递到共享模块配置文件中的authority.ftl:

     <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>
    
  • 在alfresco \ web-extension \ site-webscripts \ org \ alfresco \ components \ form \ controls \ authority.ftl中,将此参数传递给js选择器:

 picker.setOptions(
{
  itemType: "${field.endpointType}",
  <#if field.control.params.filterString??>
    filterString: "${field.control.params.filterString}",
  </#if>  
  multipleSelectMode: ${field.endpointMany?string},
  itemFamily: "authority"
 });
  • 在alfresco \ extension \ templates \ webscripts \ org \ alfresco \ repository \ forms \ pickerchildren.get.js中读取并使用该参数仅在给定的组中进行查询:
  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 
      });
  }
 }
 }

答案 1 :(得分:1)

您可以基于该authority.ftl和authority-finder.js创建一个新控件,您可以在其中修改webscript调用以返回有限数量的用户!

注意: 如果webscript不支持maxItems参数(或任何其他参数来限制返回的结果数),您可以随时创建支持该功能的全新webscript,然后将新控件指向它。

相关问题