如何使用ACL权限以编程方式在aem6.2中创建用户和组?

ArpitBora

是否可以通过使用具有权限的Jackrabbit用户管理器APIAEM6.2中创建组和用户我刚刚按照下面的URL,但代码引发了一些异常:

  1. https://helpx.adobe.com/experience-manager/using/jackrabbit-users.html

  2. https://stackoverflow.com/questions/38259047/how-to-give-permission-all-in-aem-through-programmatically

  3. ResourceResolverFactory getServiceResourceResolver在AEM 6.1中引发异常

由于getAdministrativeResourceResolver(Map)不赞成使用getServiceResourceResolver(Map)方法,那么我们该如何使用方法。

ArpitBora

分享我的解决方案,这将对其他人有所帮助。

以下是使用代码的getServiceResourceResolver(Map)方法,方法首先用于创建组,然后再创建用户,然后使用ACL特权和权限将用户添加到组中:

public void createGroupUser(SlingHttpServletRequest request) {
    String userName = request.getParameter("userName");
    String password = request.getParameter("password");
    String groupName = request.getParameter("groupName");

    Session session = null;
    ResourceResolver resourceResolver = null;
    try {
        Map<String, Object> param = new HashMap<String, Object>();
        param.put(ResourceResolverFactory.SUBSERVICE, "datawrite");
        resourceResolver = resourceResolverFactory.getServiceResourceResolver(param);
        session = resourceResolver.adaptTo(Session.class);

        // Create UserManager Object
        final UserManager userManager = AccessControlUtil.getUserManager(session);

        // Create a Group
        Group group = null;
        if (userManager.getAuthorizable(groupName) == null) {
            group = userManager.createGroup(groupName);

            ValueFactory valueFactory = session.getValueFactory();
            Value groupNameValue = valueFactory.createValue(groupName, PropertyType.STRING);
            group.setProperty("./profile/givenName", groupNameValue);
            session.save();

            log.info("---> {} Group successfully created.", group.getID());
        } else {
            log.info("---> Group already exist..");
        }

        // Create a User
        User user = null;
        if (userManager.getAuthorizable(userName) == null) {
            user = userManager.createUser(userName, password);

            ValueFactory valueFactory = session.getValueFactory();
            Value firstNameValue = valueFactory.createValue("Arpit", PropertyType.STRING);
            user.setProperty("./profile/givenName", firstNameValue);

            Value lastNameValue = valueFactory.createValue("Bora", PropertyType.STRING);
            user.setProperty("./profile/familyName", lastNameValue);

            Value emailValue = valueFactory.createValue("[email protected]", PropertyType.STRING);
            user.setProperty("./profile/email", emailValue);
            session.save();

            // Add User to Group
            Group addUserToGroup = (Group) (userManager.getAuthorizable(groupName));
            addUserToGroup.addMember(userManager.getAuthorizable(userName));
            session.save();

            // set Resource-based ACLs
            String nodePath = user.getPath();
            setAclPrivileges(nodePath, session);

            log.info("---> {} User successfully created and added into group.", user.getID());
        } else {
            log.info("---> User already exist..");
        }

    } catch (Exception e) {
        log.info("---> Not able to perform User Management..");
        log.info("---> Exception.." + e.getMessage());
    } finally {
        if (session != null && session.isLive()) {
            session.logout();
        }
        if (resourceResolver != null)
            resourceResolver.close();
    }
}

public static void setAclPrivileges(String path, Session session) {
    try {
        AccessControlManager aMgr = session.getAccessControlManager();

        // create a privilege set
        Privilege[] privileges = new Privilege[] { 
                aMgr.privilegeFromName(Privilege.JCR_VERSION_MANAGEMENT),
                aMgr.privilegeFromName(Privilege.JCR_MODIFY_PROPERTIES),
                aMgr.privilegeFromName(Privilege.JCR_ADD_CHILD_NODES),
                aMgr.privilegeFromName(Privilege.JCR_LOCK_MANAGEMENT),
                aMgr.privilegeFromName(Privilege.JCR_NODE_TYPE_MANAGEMENT),
                aMgr.privilegeFromName(Replicator.REPLICATE_PRIVILEGE) };

        AccessControlList acl;
        try {
            // get first applicable policy (for nodes w/o a policy)
            acl = (AccessControlList) aMgr.getApplicablePolicies(path).nextAccessControlPolicy();
        } catch (NoSuchElementException e) {
            // else node already has a policy, get that one
            acl = (AccessControlList) aMgr.getPolicies(path)[0];
        }
        // remove all existing entries
        for (AccessControlEntry e : acl.getAccessControlEntries()) {
            acl.removeAccessControlEntry(e);
        }
        // add a new one for the special "everyone" principal
        acl.addAccessControlEntry(EveryonePrincipal.getInstance(), privileges);

        // the policy must be re-set
        aMgr.setPolicy(path, acl);

        // and the session must be saved for the changes to be applied
        session.save();
    } catch (Exception e) {
        log.info("---> Not able to perform ACL Privileges..");
        log.info("---> Exception.." + e.getMessage());
    }
}

在代码“ datawrite”中,是一个服务映射,它在“ Apache Sling服务用户映射器服务”中与系统用户映射,该映射可在OSGI配置管理界面中进行配置。

有关系统用户的更多详细信息,请查看链接-如何在AEM中创建系统用户?

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何使用ACL权限以编程方式在aem6.2中创建用户和组?

来自分类Dev

当我以编程方式在aem 6.2(6.1)中创建组和用户时,出现AccessDeniedException吗?

来自分类Dev

AEM如何在AEM 6中打包用户组和权限

来自分类Dev

如何在Django中创建用户和组迁移?

来自分类Dev

AEM6中的SSL配置问题

来自分类Dev

如何在Codeigniter中基于用户组创建权限?

来自分类Dev

如何在Codeigniter中基于用户组创建权限?

来自分类Dev

如何使用Flutter在Firebase AUTH中创建2个不同的用户组

来自分类Dev

以编程方式在vTiger 6中创建用户

来自分类Dev

如何在aem6的吊索模型中适应子节点

来自分类Dev

如何在Joomla 3.x中以编程方式创建自定义用户组?

来自分类Dev

Django Rest Framework - 为用户、组和权限创建 API

来自分类Dev

如何使用API在AEM中创建自定义用户组

来自分类Dev

在Laravel中创建该组的子组后,如何获得该组的剩余用户

来自分类Dev

以编程方式获取SSRS 2008中的用户角色和权限

来自分类Dev

在Buddypress中创建组或用户后如何调用函数

来自分类Dev

AEM6直观:如何将HTML中的参数传递给Java模型类中的方法?

来自分类Dev

在Linux中设置特定用户和组的权限

来自分类Dev

如何以编程方式获取有权访问SharePoint中的文件或文件夹的用户和组的列表

来自分类Dev

如何以编程方式创建Windows Azure租户和用户

来自分类Dev

如何在DDD中建模用户和组?

来自分类Dev

如何在活动中自定义用户和组

来自分类Dev

如何在DDD中建模用户和组?

来自分类Dev

如何使用用户定义的相等函数在Javascript中创建一组用户定义的对象?

来自分类Dev

如何从具有组的用户列表中创建具有地址字符串的组?

来自分类Dev

以编程方式为每个用户组创建角色

来自分类Dev

如何在 Django 模板中循环这些组中的所有组和用户?

来自分类Dev

在MOSS 2007中使用Web服务在组中获取Sharepoint组名和用户

来自分类Dev

自定义用户模型创建额外的组和权限表

Related 相关文章

  1. 1

    如何使用ACL权限以编程方式在aem6.2中创建用户和组?

  2. 2

    当我以编程方式在aem 6.2(6.1)中创建组和用户时,出现AccessDeniedException吗?

  3. 3

    AEM如何在AEM 6中打包用户组和权限

  4. 4

    如何在Django中创建用户和组迁移?

  5. 5

    AEM6中的SSL配置问题

  6. 6

    如何在Codeigniter中基于用户组创建权限?

  7. 7

    如何在Codeigniter中基于用户组创建权限?

  8. 8

    如何使用Flutter在Firebase AUTH中创建2个不同的用户组

  9. 9

    以编程方式在vTiger 6中创建用户

  10. 10

    如何在aem6的吊索模型中适应子节点

  11. 11

    如何在Joomla 3.x中以编程方式创建自定义用户组?

  12. 12

    Django Rest Framework - 为用户、组和权限创建 API

  13. 13

    如何使用API在AEM中创建自定义用户组

  14. 14

    在Laravel中创建该组的子组后,如何获得该组的剩余用户

  15. 15

    以编程方式获取SSRS 2008中的用户角色和权限

  16. 16

    在Buddypress中创建组或用户后如何调用函数

  17. 17

    AEM6直观:如何将HTML中的参数传递给Java模型类中的方法?

  18. 18

    在Linux中设置特定用户和组的权限

  19. 19

    如何以编程方式获取有权访问SharePoint中的文件或文件夹的用户和组的列表

  20. 20

    如何以编程方式创建Windows Azure租户和用户

  21. 21

    如何在DDD中建模用户和组?

  22. 22

    如何在活动中自定义用户和组

  23. 23

    如何在DDD中建模用户和组?

  24. 24

    如何使用用户定义的相等函数在Javascript中创建一组用户定义的对象?

  25. 25

    如何从具有组的用户列表中创建具有地址字符串的组?

  26. 26

    以编程方式为每个用户组创建角色

  27. 27

    如何在 Django 模板中循环这些组中的所有组和用户?

  28. 28

    在MOSS 2007中使用Web服务在组中获取Sharepoint组名和用户

  29. 29

    自定义用户模型创建额外的组和权限表

热门标签

归档