2016-08-02 3 views
1

Ich möchte zuerst Gruppe erstellen und dann Benutzer und dann möchte ich Benutzer mit getServiceResourceResolver (Karte) oder loginService ("datawrite", null) zur Gruppe hinzufügen.AccessDeniedException, wenn ich Gruppe und Benutzer in aem 6.2 (6.1) programmatisch erstellen?

Ich versuchte folgenden Code, und ich bin immer Ausnahme zum Zeitpunkt der Sitzung speichern (adminSession.save()):

public void addGroupUser(SlingHttpServletRequest request) { 
     log.info("----------------------------------------> addGroupUser"); 
     String groupName = request.getParameter("groupName"); 
     String userName = request.getParameter("userName"); 
     String password = request.getParameter("password"); 

     Session adminSession = null; 
     ResourceResolver adminResolver = null; 
     try { 
      Map<String, Object> authInfoParam = new HashMap<String, Object>(); 
      authInfoParam.put(ResourceResolverFactory.SUBSERVICE, "datawrite"); 
      adminResolver = resolverFactory.getServiceResourceResolver(authInfoParam); 
      //adminResolver = resolverFactory.getAdministrativeResourceResolver(null); //deprecated method 
      adminSession = slingRepository.loginService("datawrite", null); 
      log.info("----------------------------------------> Session user id = {}",adminSession.getUserID()); 

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

      // Create a Group 
      Group group= null; 
      if (userManager.getAuthorizable(groupName) == null) { 
       //adminResolver.refresh(); 
       group = userManager.createGroup(groupName,new SimplePrincipal(groupName),"/home/groups/test"); 

       ValueFactory valueFactory = adminSession.getValueFactory(); 
       Value groupNameValue = valueFactory.createValue(groupName, PropertyType.STRING); 
       group.setProperty("./profile/givenName", groupNameValue); 
       //adminResolver.commit(); 
       log.info("----------------------------------------> {} Group successfully created.",group.getID()); 
      } else { 
       log.info("----------------------------------------> Group already exist.."); 
      } 

      // Create a User 
      User user = null; 
      if (userManager.getAuthorizable(userName) == null) { 
       //adminResolver.refresh(); 
       user=userManager.createUser(userName, password,new SimplePrincipal(userName),"/home/users/test"); 

       ValueFactory valueFactory = adminSession.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); 
       //adminResolver.commit(); 
       log.info("----------------------------------------> {} User successfully created.",user.getID()); 
      } else { 
       log.info("----------------------------------------> User already exist.."); 
      } 

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

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

Ausnahmeprotokoll ist:

javax.jcr.AccessDeniedException: OakAccess0000: Access denied 
    at org.apache.jackrabbit.oak.api.CommitFailedException.asRepositoryException(CommitFailedException.java:231) 
    at org.apache.jackrabbit.oak.api.CommitFailedException.asRepositoryException(CommitFailedException.java:212) 
    at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.newRepositoryException(SessionDelegate.java:670) 
    at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.save(SessionDelegate.java:496) 
    at org.apache.jackrabbit.oak.jcr.session.SessionImpl$8.performVoid(SessionImpl.java:419) 
    at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.performVoid(SessionDelegate.java:274) 
    at org.apache.jackrabbit.oak.jcr.session.SessionImpl.save(SessionImpl.java:416) 
    ... 
Caused by: org.apache.jackrabbit.oak.api.CommitFailedException: OakAccess0000: Access denied 
    at org.apache.jackrabbit.oak.security.authorization.permission.PermissionValidator.checkPermissions(PermissionValidator.java:212) 
    at org.apache.jackrabbit.oak.security.authorization.permission.PermissionValidator.childNodeAdded(PermissionValidator.java:150) 
    at org.apache.jackrabbit.oak.spi.commit.VisibleValidator.childNodeAdded(VisibleValidator.java:104) 
    at org.apache.jackrabbit.oak.spi.commit.VisibleValidator.childNodeAdded(VisibleValidator.java:104) 
    at org.apache.jackrabbit.oak.spi.commit.VisibleValidator.childNodeAdded(VisibleValidator.java:104) 
    at org.apache.jackrabbit.oak.spi.commit.VisibleValidator.childNodeAdded(VisibleValidator.java:32) 
    at org.apache.jackrabbit.oak.spi.commit.CompositeEditor.childNodeAdded(CompositeEditor.java:108) 
    ... 

Ich habe „Datawrite "Dienstzuordnung mit Systembenutzer in" Apache Sling Service-Benutzerzuordnungsdienst ", der in der OSGI-Konfigurationsverwaltungsoberfläche konfiguriert werden kann.

Bitte geben Sie Ihren Vorschlag und Antworten.

Danke,

Arpit Bora

Antwort

0

-Code funktioniert jetzt - es ist ein Berechtigungsproblem. I am „Datawrite“ Systembenutzer Gruppe der Administratoren:

enter image description here

auf diese Weise - die OAK Ausnahme tritt nicht auf und der Systembenutzer kann in AEM 6.2/6.1 Gruppe und der Benutzer erstellen.

+0

Es ist keine gute Praxis, dem Benutzer des Dienstes alle Administratorzugriffe zu geben. Dies übertrifft den Zweck, Systembenutzer zu haben und Admin Resource Resolver abzulehnen. Ihr Service-/Systembenutzer sollte nur Rechte zur Unterstützung seiner beabsichtigten Funktionen haben. –

+0

Dank @Ameesh für den Vorschlag, dass Sie Recht haben, ist jede andere Möglichkeit zum Erstellen von Gruppen und Benutzern in aem6.2/6.1 mit der Methode 'getServiceResourceResolver (map)'. – ArpitBora

+0

Wenn Sie versuchen, etwas wiederzuverwenden, das bereits in AEM vorhanden ist, können Sie auf das mit AEM 6 mitgelieferte Communities-Paket verweisen. Es verfügt über einen Benutzer 'communities-user-admin', der über relevanten Zugriff zum Erstellen von Benutzergruppen verfügt verarbeiten. Weitere Informationen zur Verwendung finden Sie in der Dokumentation zu Java - https://docs.adobe.com/docs/en/aem/6-2/develop/ref/javadoc/com/adobe/cq/social/members/endpoints /package-frame.html Der Paketname lautet - 'cq-social-members-api' und kann unter -'/libs/social/members/install/' –

Verwandte Themen