2016-06-06 1 views
1

Comment puis-je créer un utilisateur système dans Sling?Comment créer un utilisateur système dans Sling?

J'ai essayé de chercher mais tout ce que je trouve est lié à AEM, que je n'utilise pas. Est-il possible de créer l'utilisateur en utilisant Jackrabbit API ou Sling Initial Content (fichiers descripteurs)?

J'ai essayé d'exécuter ce qui suit:

curl -u admin:admin -F:name=myuser -Fpwd=mypwd -FpwdConfirm=mypwd -Frep:principalName=myuser -Fjcr:primaryType=rep:SystemUser http://localhost:8080/home/users/system/*

Mais il y a une erreur:

*ERROR* [127.0.0.1 [1465215465364] POST /home/users/system/* HTTP/1.1] org.apache.sling.servlets.post.impl.operations.ModifyOperation Exception during response processing. 
javax.jcr.nodetype.ConstraintViolationException: Property is protected: rep:principalName = myuser 
    at org.apache.jackrabbit.oak.jcr.delegate.NodeDelegate.setProperty(NodeDelegate.java:525) 
    at org.apache.jackrabbit.oak.jcr.session.NodeImpl$35.perform(NodeImpl.java:1358) 
    at org.apache.jackrabbit.oak.jcr.session.NodeImpl$35.perform(NodeImpl.java:1346) 
    at org.apache.jackrabbit.oak.jcr.delegate.SessionDelegate.perform(SessionDelegate.java:209) 
    at org.apache.jackrabbit.oak.jcr.session.ItemImpl.perform(ItemImpl.java:112) 
    at org.apache.jackrabbit.oak.jcr.session.NodeImpl.internalSetProperty(NodeImpl.java:1346) 
    at org.apache.jackrabbit.oak.jcr.session.NodeImpl.setProperty(NodeImpl.java:432) 
    at org.apache.sling.servlets.post.impl.helper.SlingPropertyValueHandler.store(SlingPropertyValueHandler.java:592) 

Répondre

1

Je ne sais pas c'est possible grâce à une demande de poste par: https://mail-archives.apache.org/mod_mbox/sling-users/201512.mbox/%[email protected].com%3E

Le solution suggérée est d'utiliser l'api jackrabbit pour ce faire. Cela ressemblerait à quelque chose comme:

//get a user manager 

try { 
    User systemUser = userManager.createSystemUser("myuser", "/home/users/system"); 
} catch (Exception e) { 
    log.error("Error adding user",e); 
    throw e; 
} 

//commit changes 

Il est très important de noter que cela ne vous permet pas de définir un mot de passe pour cet utilisateur, ne peut être réglé avec un user.changePassword() - lorsque je tente que Je reçois une erreur:

javax.jcr.UnsupportedRepositoryOperationException: system user 

de la doc java:

Create a new system user for the specified userID. The new authorizable is required to have the following characteristics:

  • User.isSystemUser() returns true.
  • The system user doesn't have a password set and doesn't allow change the password.

http://jackrabbit.apache.org/api/2.10/org/apache/jackrabbit/core/security/user/UserManagerImpl.html

Voici toute ma classe d'activateurs: https://gist.github.com/scrupulo/61b574c9aa1838da37d456012af5dd50

2

Il existe une solution prête à l'emploi basée sur Sling et Jackrabbit Oak. Il dispose d'un texte fondé sur DSL pour la mise utilisateurs et ACLs, par exemple:

create service user bob,alice 

set ACL on /libs,/apps 
    remove * for alice 
    allow jcr:read for bob 
end 

Il est également possible d'intégrer ces instructions dans le modèle de provisionnement utilisé pour construire une rampe de lancement de Sling - en supposant que vous utilisez le slingstart-maven-plugin.

La documentation complète se trouve à Repository Initializers and Repository Initialization Language

+0

gardera un oeil à ce sujet. J'ai un cas d'utilisation où je faisais cela juste cette semaine, mais en utilisant le AccessControlUtils de jackrabbit. La mienne fonctionne bien, mais être capable d'écrire un ensemble de commandes serait une solution intéressante. – bstockwell

+1

Je vois que la solution a été libérée, ce qui est génial. @bstockwell, vous pourriez être intéressé par cela. – RK1