Webscripts et droits

cancel
Showing results for 
Search instead for 
Did you mean: 
ericc
Member II

Webscripts et droits

Bonjour,
je cherche en vain une solution pour pouvoir appeller un webscript qui me modifie des noeuds sans avoir à me connecter.

Explication :
- Via une URL j'appelle un webscript qui doit me faire des MAJ sur un noeud (en gros : des contacts me confirment leur participation à un coloc via un lien)
- Quand je mets mon webscript avec une authentificaton guest et dans mon url d'appel un guest=true. J'ai pas de demande de login (bien) mais lorsque je fais un search.findNode() il ne me trouve pas mes noeuds. La solution à ça : ajouter l'utilisateur Guest comme lecteur (mais soucis de sécurité du coup).

Est-il possible de modifier ou de lister des noeuds via webscript sans avoir un utilisateur Alfresco pour ça? (et sans que l'utilisateur Guest est les droits sur les documents que je souhaite modifier)

Merci.

(Ma conf : Alfreco 2.9b)
10 Replies
jbourgeois
Member II

Re: Webscripts et droits

Bonjour,
avez vous essayé en donnant des droits supplémentaires juste le temps de l'exécution du web script :

http://wiki.alfresco.com/wiki/JavaScript_API#Permission_and_Security_API

oid setPermission(string permission, string authority)  en debut de script puis void removePermission(string permission, string authority) à la fin ?
ericc
Member II

Re: Webscripts et droits

Ah je ne connais pas ces fonctions, merci pour l'info.

Par contre, vu que je cherche un noeud, et que si je n'ai pas les droits de lecture je ne vais pas pouvoir le trouver où dois je faire le setPermission? Sur le store?

Pour trouver mon noeud je fais actuellement cela :

        var myNodeRef="workspace://SpacesStore/"+ref;
   return search.findNode(myNodeRef);

Merci.
jbourgeois
Member II

Re: Webscripts et droits

sans les droits de lecture, ça me parait difficile …

Si vous êtes sûr de la réference du noeud que vous cherchez, vous pouvez essayer ceci

var myNodeRef="workspace://SpacesStore/"+ref;
var myNode = companyhome.nodeByReference[mynodeRef]; // ça vous retourne le noeud s'il existe
myNode.setPermission(…)

plus d'info ici : http://wiki.alfresco.com/wiki/Template_Guide
ericc
Member II

Re: Webscripts et droits

J'ai testé et quand j'appelle par exemple cette méthode (sur un nœud qui existe)
companyhome.nodeByReference["workspace://SpacesStore/e01547a7-3c3f-11dd-a06f-538aa92f6f92"]
j'ai ce message :
Cannot read property "workspace://SpacesStore/e01547a7-3c3f-11dd-a06f-538aa92f6f92" from undefined

Mon objet companyhome existe pourtant, une idée?
jbourgeois
Member II

Re: Webscripts et droits

et companyhome.childrenBySavedSearch["workspace://SpacesStore/e01547a7-3c3f-11dd-a06f-538aa92f6f92"] ?

vous avez de l'aide dans le "template guide" : http://wiki.alfresco.com/wiki/Template_Guide
ericc
Member II

Re: Webscripts et droits

J'ai essayé et même erreur, pareil avec lucene search (idem avec les droits de lecture sur les noeuds en question, donc ça ne doit pas venir d'une question de droits).

J'ai lu la page Template Guide mais ça ne m'a pas beaucoup aidé :-/
jbourgeois
Member II

Re: Webscripts et droits

en fait, vous voulez pouvoir modifier un nœud sans être authentifié et sans mettre le document accessible à tout le monde (GUEST avec droit de lecture proscrit).

vous pouvez toujours utiliser un système de connexion automatique pour la connexion à votre navigateur (SSO) mais c'est surement long à mettre en place (je ne suis pas un spécialiste en la question).

ou alors il faut mettre le login de la personne en GET ou POST (question sécurité c'est pas top non plus) de votre webscript et essayer d'utiliser l'API people (http://wiki.alfresco.com/wiki/JavaScript_API#People_API) mais je sais pas ce que ça donne après (c'est sans doute une  piste à explorer)
ericc
Member II

Re: Webscripts et droits

Pire que ça, les personnes qui vont accéder à mon URL ne sont pas des utilisateurs Alfresco du tout. Des contacts doivent confirmer ou non leur présence à un coloc. Le coloc est un type alfresco dans lequel j'ai une association avec mes contact. Quand quelqu'un confirme sa venue il est ajouté à la liste des réponses positives.
Je suis donc obligé de modifier un noeud (coloc) et d'en lire un autre (contact) sans pour autant être connecté à Alfresco; là en donnant les droits suffisant à l'utilisateur Guest ça fonctionne mais je ne trouve pas ça spécialement propre (et une faille pour la confidentialité des données).

Il n'est pas possible de faire en sorte qu'un webscript ais ces droits, ne serais que de façon temporaire (votre solution me plaisait bien, mais si je ne peux accéder au noeud je vois mal comment en modifier ses permissions)? Certes c'est une possible faille si cela est mal fait; mais le cas ne me semble pas si "spécial" que ça.
jbourgeois
Member II

Re: Webscripts et droits

une manière que je connais pour qu'un script soit "lancé" avec des droits supplémentaires serait par exemple :
- que votre webscript enregistre un fichier avec vos données dans un espace particulier
- ce que faisais votre webscript, il faut le mettre dans un fichier js dans Script du Data Dictionnary (il faudra adapter le code)
- qu'une rêgle soit créée dans cet espace permettant de lancer ce script

le problème, c'est que dans ces cas là, la rêgle sera lancée avec les droits de l'utilisateur. ça ne marchera donc pas.

la solution consiste donc à créer un scheduler (http://wiki.alfresco.com/wiki/Scheduled_Actions (regardez le "simple example)) qui lancerait la fonction javascript avec un utilisateur voulu (par exemple "System").


en partant sur ce principe, il y a moyen de s'en sortir proprement. Il n'y aurait que ce fameux fichier de départ à créer avec les données de l'utilisateur (par exemple créé un fichier nommé "user1_present.txt" ou "user1_absent.txt" puis exploité la chaine de caractère, une fois que c'est fait, on supprime le fichier).

par contre le repertoire en question sera pas trop sécurisé mais je pense que l'impact serait minime)