【问题标题】:How do I retrieve a list of groups for each user using Alfresco Javascript API如何使用 Alfresco Javascript API 检索每个用户的组列表
【发布时间】:2011-09-29 08:49:28
【问题描述】:

我对 Alfresco 和他们的 Javascript API 完全陌生,所以请记住这一点...

我希望能够查看 Alfresco 存储库中每个用户的组列表。

这是我目前的代码:

  var gens = search.luceneSearch("TYPE:\"{http://www.alfresco.org/model/content/1.0}person\"");
  var logFile = space.childByNamePath("log_user_groups.csv");
  if (logFile == null) {
      logFile = space.createFile("log_user_groups.csv");
   }
   logFile.content = "";



   for (var i=0; i<gens.length;i++) {
     logFile.content += gens[i].properties["cm:userName"]+"\n";

     var groupes= people.getContainerGroups(gens[i]);

     for (var j=0; j<groupes.length;j++) {
       logFile.content += "\t"+groupes[j].properties.shortName +"\t";
       logFile.content += "\t"+groupes[j].properties.fullName +"\t";
       logFile.content += "\t"+groupes[j].properties.displayName +"\n";
     }
  }

使用正确显示的用户名创建文件。但是,组属性“shortName”、“fullName”和“displayName”都为空。事实上,我打印出了“groupes”对象的所有属性,并且该对象的每个字段都是“未定义”。

有人知道我做错了什么吗?

任何帮助将不胜感激。

标准。

【问题讨论】:

  • 对不起,我忘了。 Alfresco 的版本是 3.2
  • 您只想要顶级组还是所有组?即,如果用户 Fred 是 A 组的成员,而 A 组本身也是 B 组的成员,那么您想要 Fred 的 A 组和 B 组,还是只需要其中一个?
  • 嗨,Gagravarr。感谢您的询问。我想要 Fred 的 A 组和 B 组。

标签: javascript-framework alfresco


【解决方案1】:

我猜你使用了错误的属性名称。

您需要以下内容:

  • 全名:groupes[j].properties["usr:authorityName"]
  • 显示名称:groupes[j].properties["usr:authorityDisplayName"]
  • 简称:我不知道 :) 也许groupes[j].properties["usr:authorityShortName"]

您也可以只获取 NodeRef id。

然后登录到 Alfresco explorer。然后进入管理控制台 --> 节点浏览器

粘贴 id(应该是 workspace://spacesStore//biglongUUID 之类的东西)。在那里你可以看到与组相关的所有属性。

或者您可以循环 groupes[k].properties 映射并打印所有属性。

【讨论】:

  • 嗨,塔希尔。我不想要此人的用户名,而是该人所属的实际 组名
  • 嗨,规范,权威代表用户或组。所以 AuthorityName 应该是组名。你试过了吗?因为 cm 命名空间只用于 3.2 之后的权限。所以直到 3.2(也许是 3.3)它一直是 usr 命名空间。
【解决方案2】:

我需要类似的东西(完整的组列表),所以我这样做了:

var temp = [];

function addGroups (groups)
  {
    for each (group in groups)
      {
        temp.push(group.getDisplayName());
        addGroups(group.getChildGroups());
      }
  }

addGroups(groups.getAllRootGroups());

这在一定程度上有效。问题是 getDisplayName() 返回一个非常不漂亮的组名。通常在处理文档并显示与用户关联的组名时,我会执行 people.getContainerGroups() 并使用 group.properties["cm:authorityName"] 来获取可显示的名称(如上所述),但是我收到的组getAllRootGroups() 没有属性(group.properties 未定义)。

有谁知道为什么以这种方式返回的组列表与 people.getContainerGroups() 返回的属性不同?

【讨论】:

  • 好吧,我这里全是废话。事实证明根本没有“可读”的组名。我误解了我之前所做的事情(我是几个月前写的),并认为我得到了一个可读的组名,但后来我使用本地化字符串包将组名转换为可读的名称。
  • “可读”组名到底是什么意思。我正在使用工作流 API,其中一个道具的值为 {http://www.alfresco.org/model/content/1.0}authorityContainer Node Ref: workspace://SpacesStore/something something 现在这个值的类型是权威容器,对吗?所以我应该能够.properties [“cm:authorityName”],但即使对于属性字段它也说未定义。即当我执行 .properties 并尝试获取地图时,它显示未定义。这里发生了什么?为什么我无法获取道具?可读的组名是什么意思?谢谢
  • 我在上面的评论中打印的值来自 ftl 文件。它似乎是 authorityContainer 的一个实例,但是当我尝试将 myprop.properties 发送到 ftl 并尝试打印它时,它给了我未定义的信息。相反,应该说不能将映射转换为字符串或类似的东西。谢谢。
【解决方案3】:

最简单的方法是将其翻转过来。相反,为每个组询问它包含哪些组和用户。最后,反转它。

您需要从根组开始。 Alfresco 中的groups JS 对象将为您提供这些以及其他。它是由ScriptAuthorityService 实现的,所以你可能想看看JavaDocs

首先,获取根组

var rootGroups = groups.getAllRootGroups() ;

对于每个组,使用getAllUsers() 获取组中的所有用户(直接和继承),并将它们存储在某处。现在,使用getChildGroups() 获取所有子组。以相同的方式处理每一个,根据需要递归。

【讨论】:

    猜你喜欢
    • 2011-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-08
    • 2014-04-06
    • 1970-01-01
    相关资源
    最近更新 更多