Page 1 sur 1

JS Script dans un Faceplate > HMIRuntime.UserManagement.GetRolesFromUser()

Posté : 19 sept. 2024, 09:36
par valerypetit
Bonjour

Il n'y a pas encore beaucoup de retour d'expérience sur les script JS pour les IHM MTP...
Internet est pourtant une bonne source d'inspiration quand tout le monde s'y met :D
j'apporte donc ma pierre à l'édifice.

En utilisant le code suivant (présent dans l'aide siemens) j'affiche le(s) role(s) de l'utilisateur connecté

Code : Tout sélectionner

export function Texte_1_Text_Trigger(item) {
    var value;
let roles = HMIRuntime.UserManagement.GetRolesFromUser();
if (roles.length > 0) {
  let strRoles = '';

  roles.forEach((roleName) => {
  strRoles += roleName + ';'
  });
  HMIRuntime.Trace("The current user is in role(s): " + strRoles);
value = "The current user is in role(s): " + strRoles
  } else {
      HMIRuntime.Trace("User has no roles.");
          }

    return value;
}
J'ai besoin de limiter l’accès à un bouton présent dans un faceplate lorsque l'utilisateur n'a pas les droits, par contre si la fonction est activée, n'importe quel utilisateur doit être capable de la désactiver.
ça me donne le code présent sur l'image.

Malheureusement la fonction HMIRuntime.UserManagement.GetRolesFromUser() semble ne pas être reconnu à cet emplacement.

auriez vous un retour d'expérience qui me permettrait d'avancer sur le sujet?

Merci d'avance.

Re: JS Script dans un Faceplate > HMIRuntime.UserManagement.GetRolesFromUser()

Posté : 19 sept. 2024, 13:58
par djé
Salut,
SI je comprends bien tu veux gérer l'autorisation d'un bouton différement si le bouton est appuyé ou non.
De ce que je sais,vois il n'y a pas de fonction pour récupérer l'accès de la personne connectée.
On peut juste connaitre si le niveau d'accès requis pour un objet est satisfait (Méthode CheckAuthorization() :Indique si l'utilisateur actuel est autorisé à commander le conteneur de faceplate).
Dans ton cas il faudrait deux boutons superposé (je sais c'est moche) un au premier plan avec accès pour déclencher une action et l'autre pour arrêter l'action sans niveau d'accès; puis gérér la visibilité du premier.

Re: JS Script dans un Faceplate > HMIRuntime.UserManagement.GetRolesFromUser()

Posté : 19 sept. 2024, 17:55
par valerypetit
Hello
Merci Djè

J'ai utilisé l’antisèche Siemens et ai eu un début de solution

Dans un champs d'E/S
Pour la valeur de processus, je met la variable @UserName
Je règle Modification sur Script et met le script suivant :

Code : Tout sélectionner

export function Champ_ES_1_ProcessValue_OnPropertyChanged(item, value) {
let roles = HMIRuntime.UserManagement.GetRolesFromUser();
// Reset tags pour les droits systèmes
 Tags('HMI_admin').Write(0);
 Tags('HMI_Operator').Write(0);
 Tags('HMI_Monitor').Write(0);
// Reset tags pour les droits utilisateur
 Tags('Operateur').Write(0);
 Tags('Maintenance').Write(0);

if(roles.length > 0){
   roles.forEach((roleName) => {

   if (roleName=="HMI Administrator") {
     Tags('HMI_admin').Write(1);

     } 
   if (roleName=="HMI Operator") {
     Tags('HMI_Operator').Write(1);

     }      
   if (roleName=="HMI Monitor") {
     Tags('HMI_Monitor').Write(1);

     } 
   if (roleName=="Operateur") {
     Tags('Operateur').Write(1);

     }     
    if (roleName=="Maintenance") {
     Tags('Maintenance').Write(1);

     }
  });
  }
}
Rien de plus simple finalement.

mai comme je suis un cancre, je ne parviens pas à faire la suite...

J'ai crée un bouton sur une page de test qui doit apparaitre lorsque HMI_Admin est à 1 ou que le bouton a été commuté.

voici le script...

Code : Tout sélectionner

export function Commutateur_1_Visible_Trigger(item) {
    var value = 0;

 if (Tags('HMI_admin') == 1)  {
        value = 1;
}

 if (Tags('Vartest') == 1)
{
        value = 1;
    }

    return value;
}
merci à vous.