Question
· Déc 29, 2023

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 = $USERNAME
    do %session.Login("mysysuser","xxxxxxxxx")
    New $NameSpace
    Set $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

Version du produit: IRIS 2023.1
$ZV: IRIS for UNIX (Ubuntu Server 22.04 LTS for x86-64) 2023.1 (Build 229U) Fri Apr 14 2023 17:29:40 EDT
Discussion (2)2
Connectez-vous ou inscrivez-vous pour continuer