如何使用 Alfresco Javascript API 检索每个用户的组列表

Posted

技术标签:

【中文标题】如何使用 Alfresco Javascript API 检索每个用户的组列表【英文标题】:How do I retrieve a list of groups for each user using 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.0person\"");
  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 组。 【参考方案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.0authorityContainer 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() 获取所有子组。以相同的方式处理每一个,根据需要递归。

【讨论】:

以上是关于如何使用 Alfresco Javascript API 检索每个用户的组列表的主要内容,如果未能解决你的问题,请参考以下文章

Alfresco服务器端JavaScript调试器

如何解决 alfresco sdk 中的 alfresco webscripts 中的 CORS 错误?

如何向 Liferay 中新创建的用户授予 Alfresco 权限

使用 CMIS PHP 将文件上传到 Alfresco 时如何进行文件版本控制

Alfresco:如何在 Alfresco Share 中搜索链接(app:filelink 或 cm:link 类型的节点)?

Alfresco 和 drupal 集成