【问题标题】:alfresco: limiting authority.ftl to a group of usersalfresco:将 authority.ftl 限制为一组用户
【发布时间】:2016-01-18 14:00:13
【问题描述】:

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

【问题讨论】:

    标签: alfresco alfresco-share


    【解决方案1】:

    为了实现这一点,我需要做一些更改:

    • 您应该使用新的控制参数将参数传递给您的共享模块配置文件中的 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 
          });
      }
     }
     }
    

    【讨论】:

    • 非常感谢!!!,我将在我的 amp 项目中构建这两个文件的修改版本。但是我应该做哪些修改才能使用新文件?
    • 我的第一步是关于使用。在您的模块共享配置文件(share-config-custom.xml?)中,您应该将控件添加到属性字段定义中。我已经更新了答案以使其更加清晰。
    • 这就是我所做的,我认为我将文件放在错误的目录中,你能告诉我这些文件放在 repo amp 的哪个文件夹中吗?
    • 我已将 authority.ftl 的路径更新为 alfresco\web-extension\site-webscripts\org\alfresco\components\form\controls\authority.ftl 。提到的位置是它们在我的模块的 jar 文件中的位置。
    • @StefanDeLaet 嗨,只是想知道 "mygroupname" 将采用动态组名还是硬编码组名?就像 A 在 Group1&2 中,B 在 Group1 中,所以当 A 搜索时,结果将来自 Group1&2 ..对吗?如果这是一个不好的问题,请道歉,但我是新手
    【解决方案2】:

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

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

    【讨论】:

    • 实际上我希望在属于某个组的成员的用户中进行权限控制搜索,不限制结果的数量,所以请问我应该修改 authority-finder.js 的哪个部分来完成这个?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-08
    • 2017-12-29
    相关资源
    最近更新 更多