如何使用 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 sdk 中的 alfresco webscripts 中的 CORS 错误?
如何向 Liferay 中新创建的用户授予 Alfresco 权限
使用 CMIS PHP 将文件上传到 Alfresco 时如何进行文件版本控制
Alfresco:如何在 Alfresco Share 中搜索链接(app:filelink 或 cm:link 类型的节点)?