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);

为了在以前存在的站点中配置和启用新角色,我提出的解决方案如下

  • 配置新角色,如此处所述:
  • 在所需的站点组下创建新的子组权限。您可以使用RESTAPI或JavaScript API从管理控制台中的“Groups”实用程序执行此操作
  • 将新的子组权限添加到
    APP.SHARE
    并将其从
    APP.DEFAULT
    中删除
  • 在站点的根文件夹上配置适当的权限。换句话说,新角色必须授予新的子组
  • 注意:我还没有确认,但第三步可能是可选的。我认为这样做的唯一好处是让新的小组以与Alfresco内部完全相同的方式妥善安排

    我创建了以下JavaScript代码段,可以使用JavaScript控制台管理工具()轻松运行和修改。如果您需要在多个现有站点中启用新角色,这可能会很有用

    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方法的参数