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

Forum traitant des automates industriels de marque Siemens.
Répondre
valerypetit
Forcené des structures
Forcené des structures
Messages : 179
Enregistré le : 24 janv. 2016, 21:47

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

Message 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.
Fichiers joints
Inib Forçage.png
Avatar du membre
djé
Dieu du process
Dieu du process
Messages : 864
Enregistré le : 20 oct. 2015, 09:55
Localisation : Bretagne, Pays de la Loire, Nantes
Contact :

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

Message 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.
Le monde se divise en 10 catégories:les personnes qui comprennent le binaire,et les autres.

Dans tout ce que vous apprenez, seuls 10% vont vous servir,mais vous ne savez pas lesquels ...
valerypetit
Forcené des structures
Forcené des structures
Messages : 179
Enregistré le : 24 janv. 2016, 21:47

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

Message 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.
Répondre