Comment donner momentanément un (des) rôle(s) à un utilisateur ?
Bonjour,
Notre application doit créer des utilisateurs du système à partir d'un formulaire de demande.
Pour utiliser les classes Security, il est nécessaire de disposer des droits permettant d'utiliser le namespace %SYS, ce qui n'est pas le cas des utilisateurs qui valident les demandes.
Il n'est pas souhaitable que ces utilisateurs aient ce rôle de manière permanente, j'ai donc procédé de la manière suivante :
J'ai créé une classe façade pour les classes Security.Users, Security.Roles, Security.Resources qui me permet de me loguer avec un utilisateur autorisé sur le NS %SYS
Voici un example de méthode :
ClassMethod Modify(name As%String, ByRef properties As%String) As%Status
{
set who = $USERNAMEdo%session.Login("mysysuser","xxxxxxxxx")
New$NameSpaceSet$Namespace="%SYS"Return##class(Security.Roles).Modify(name, .properties)
}
Je me demande quelle est la portée de ce login (quand je reviens de cette méthode, suis-le toujours connecté avec mon utilisateur mysysuser ?)
Je pense que oui (je n'ai pas testé car jusqu'à présent j'appelais ces méthodes dans le cadre d'une api rest donc pour toute nouvelle action je réutilisais mon token de l'utilisateur effectif).
Mais je dois maintenant faire une méthode qui appelle une fonction de Security.Users, mais qui doit réaliser d'autres actions après, sans être connectée avec l'utilisateur mysysuser.
Dans ce cas, comment puis-je revenir à mon utilisateur effectivement connecté avant l'appel de %session.Login().
J'aurais pu faire un autre appel à %session.Login, en utilisant le login que je sauvegarde (who), mais je ne connais pas son mot de passe.
Je cherche donc une solution à ce problème
Comments
Réponse d' @Eduard Lebedyuk :
L'approche la plus sûre consiste à utiliser Privileged Routine Application.
💡 Cette question est considérée comme une question clé. Plus de détails ici.