Alfresco 在现有安装中配置共享角色
我正在尝试为现有安装中的共享站点创建新角色(权限组)。在询问之前,我做了“家庭作业”,并找到了有用的资源,如:Alfresco 在现有安装中配置共享角色,alfresco,roles,alfresco-share,Alfresco,Roles,Alfresco Share,我正在尝试为现有安装中的共享站点创建新角色(权限组)。在询问之前,我做了“家庭作业”,并找到了有用的资源,如: 除其他外 我在配置我的新角色方面没有问题,它在干净的安装或新站点中就像一个符咒,我的问题是我需要为现有站点提供该角色 var siteName = "my-site-id"; var newRoleName = "CustomConsumer"; var newRoleSubGroupName = "site_" + siteName + "_" + newRoleName
var siteName = "my-site-id";
var newRoleName = "CustomConsumer";
var newRoleSubGroupName = "site_" + siteName + "_" + newRoleName;
var newRoleSubGroupFullName = "GROUP_" + newRoleSubGroupName;
/************************************************************/
/** Creation of the sub-group that represents the new role **/
/************************************************************/
logger.log("Starting sub-group creation");
// Get the site group object
var siteGroup = groups.getGroup("site_" + siteName);
// Create the sub-group
var newRoleSubGroup = siteGroup.createGroup(newRoleSubGroupName, newRoleSubGroupName);
logger.log("Sub-group creation done");
/**************************************************/
/** Setup the appropriate zones to the sub-group **/
/**************************************************/
logger.log("Setting up appropriate zones to the sub-group");
var shareZonesAdd = Packages.java.lang.Class.forName("java.util.HashSet").newInstance();
shareZonesAdd.add(Packages.org.alfresco.service.cmr.security.AuthorityService.ZONE_APP_SHARE);
var shareZonesRemove = Packages.java.lang.Class.forName("java.util.HashSet").newInstance();
shareZonesRemove.add(Packages.org.alfresco.service.cmr.security.AuthorityService.ZONE_APP_DEFAULT);
var ctx = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();
var authorityService = ctx.getBean("authorityService");
var permissionGroup = authorityService.addAuthorityToZones(newRoleSubGroupFullName, shareZonesAdd);
var permissionGroup = authorityService.removeAuthorityFromZones(newRoleSubGroupFullName, shareZonesRemove);
logger.log("Zones setup done");
/*******************************************************/
/** Setup the appropriate permissions fo the new role **/
/*******************************************************/
var nodes = search.xpathSearch('/app:company_home/st:sites/cm:' + siteName);
for (var i = 0; i < nodes.length; i++)
{
logger.log("Setting new 'Content Expert' role permissions...");
nodes[i].setPermission(newRoleName, newRoleSubGroupFullName);
logger.log("Permissions folder successfully set");
}
为此,我在系统组中创建了一个子组来表示站点。例如,假设GROUP\u site\uu{siteId}
是站点,我创建了一个子组,名为GROUP\u site\u{siteId}\u MyCustomRole
。问题是子组是在应用程序默认区创建的,为了使其正常工作,它必须位于应用程序共享区(如果我错了,请任何人纠正我)。
基本上这就是我的问题。。。我需要“升级”现有网站,但我不确定如何在APP.SHARE
区域中创建子组
我已经阅读了JavaScript API和REST服务文档,似乎不支持区域管理。我认为实现它的唯一方法是通过Java API,特别是通过授权服务:
现在,假设Java授权服务是我唯一的选择,那么哪种方法是实现升级功能的正确方法,可以在适当的区域中创建子授权?也许是通过创建一个自定义补丁()
除非我采取了错误的方法,否则我想听听有同样问题的人的意见,否则我会非常感谢他们的建议。如果我是唯一一个需要为现有站点创建新角色的人,我会非常惊讶
编辑:
这里跟踪了这个问题:这很难看,但是您可以从JavaScript创建这种类型的组。在你这么做之前,要真正意识到你可能要处理的所有后果。在alfresco share中搞乱基于组的安全性非常简单——即使您只坚持ootb功能。它是用德语写的,但你可能还是不想看一看我提出的扩展 也就是说,您可以使用Javascript创建组,如下所示:
var groupName = "YourGroup";
var shareZones = Packages.java.lang.Class.forName("java.util.HashSet").newInstance();
shareZones.add(Packages.org.alfresco.service.cmr.security.AuthorityService.ZONE_APP_SHARE);
shareZones.add(Packages.org.alfresco.service.cmr.security.AuthorityService.ZONE_AUTH_ALFRESCO;
var ctx = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();
var authorityService = ctx.getBean("authorityService");
var siteRoleGroup = "site_" + site.shortName + "_Site" + groupName;
var permissionGroup = authorityService.createAuthority(Packages.org.alfresco.service.cmr.security.AuthorityType.GROUP, siteRoleGroup, site.shortName, shareZones);
为了在以前存在的站点中配置和启用新角色,我提出的解决方案如下
APP.SHARE
并将其从APP.DEFAULT
中删除var siteName = "my-site-id";
var newRoleName = "CustomConsumer";
var newRoleSubGroupName = "site_" + siteName + "_" + newRoleName;
var newRoleSubGroupFullName = "GROUP_" + newRoleSubGroupName;
/************************************************************/
/** Creation of the sub-group that represents the new role **/
/************************************************************/
logger.log("Starting sub-group creation");
// Get the site group object
var siteGroup = groups.getGroup("site_" + siteName);
// Create the sub-group
var newRoleSubGroup = siteGroup.createGroup(newRoleSubGroupName, newRoleSubGroupName);
logger.log("Sub-group creation done");
/**************************************************/
/** Setup the appropriate zones to the sub-group **/
/**************************************************/
logger.log("Setting up appropriate zones to the sub-group");
var shareZonesAdd = Packages.java.lang.Class.forName("java.util.HashSet").newInstance();
shareZonesAdd.add(Packages.org.alfresco.service.cmr.security.AuthorityService.ZONE_APP_SHARE);
var shareZonesRemove = Packages.java.lang.Class.forName("java.util.HashSet").newInstance();
shareZonesRemove.add(Packages.org.alfresco.service.cmr.security.AuthorityService.ZONE_APP_DEFAULT);
var ctx = Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();
var authorityService = ctx.getBean("authorityService");
var permissionGroup = authorityService.addAuthorityToZones(newRoleSubGroupFullName, shareZonesAdd);
var permissionGroup = authorityService.removeAuthorityFromZones(newRoleSubGroupFullName, shareZonesRemove);
logger.log("Zones setup done");
/*******************************************************/
/** Setup the appropriate permissions fo the new role **/
/*******************************************************/
var nodes = search.xpathSearch('/app:company_home/st:sites/cm:' + siteName);
for (var i = 0; i < nodes.length; i++)
{
logger.log("Setting new 'Content Expert' role permissions...");
nodes[i].setPermission(newRoleName, newRoleSubGroupFullName);
logger.log("Permissions folder successfully set");
}
var siteName=“我的站点id”;
var newRoleName=“CustomConsumer”;
var newRoleSubGroupName=“site”+siteName+“\u”+newRoleName;
var newRoleSubGroupFullName=“组”+newRoleSubGroupName;
/************************************************************/
/**创建代表新角色的子组**/
/************************************************************/
logger.log(“开始创建子组”);
//获取站点组对象
var siteGroup=groups.getGroup(“站点名称”+siteGroup);
//创建子组
var newRoleSubGroup=siteGroup.createGroup(newRoleSubGroupName,newRoleSubGroupName);
logger.log(“完成子组创建”);
/**************************************************/
/**为子组设置适当的分区**/
/**************************************************/
logger.log(“为子组设置适当的区域”);
var shareZonesAdd=Packages.java.lang.Class.forName(“java.util.HashSet”).newInstance();
shareZonesAdd.add(Packages.org.alfresco.service.cmr.security.AuthorityService.ZONE\u APP\u SHARE);
var shareZonesRemove=Packages.java.lang.Class.forName(“java.util.HashSet”).newInstance();
ShareZoneRemove.add(Packages.org.alfresco.service.cmr.security.AuthorityService.ZONE\u APP\u默认);
var ctx=Packages.org.springframework.web.context.ContextLoader.getCurrentWebApplicationContext();
var authorityService=ctx.getBean(“authorityService”);
var permissionGroup=authorityService.addAuthorityToZones(newRoleSubGroupFullName,shareZonesAdd);
var permissionGroup=authorityService.removeAuthorityFromZones(newRoleSubGroupFullName,ShareZoneRemove);
logger.log(“区域设置完成”);
/*******************************************************/
/**为新角色设置适当的权限**/
/*******************************************************/
var nodes=search.xpathSearch('/app:company_home/st:sites/cm:'+siteName);
对于(var i=0;i
重要提示:请记住,正如Andreas Steffan所指出的,您可能还需要处理团队生命周期、邀请流程、工作流等问题。因此,请注意使用此解决方案
编辑:
这里解释的解决方案可能也能起作用,但我还没有尝试:对于出现错误的人:org.springframework.beans.factory.BeanDefinitionStoreException:在引用时只能指定getBean方法的参数